分类: LINUX
2011-11-23 20:53:39
考虑以2的补码形式来表示一个n位整数A。若A是正的,则符号位”an-1”是0,其余位表示此数的幅值,因此有:
数零被认为是正的,因此表示为符号位值为0和所有幅值位都为0.可见, 正整数可表示的范围是由0(所有幅值全为0)到2n-1-1(所有幅值位全为1)。再大的数将需要更多位。
对于一个负数A(A<0),其符号位an-1是1.其余n-1位能取2n-1个值中的某个值。于是,负整数可表示的范围是-1到-2n-1。对于n-1位值与负整数值的对应,我们希望以这样一种方式来指派负整数的位值,它能使算术运算能直截了当地处理。
在无符号整数表示中,要从n位值的表示计算得到整数的值,是由各位乘以位权值取和而得到的,最高有效位的权是+2n-1。
对于一个有符号位的表示法,如果最高位的权是-2n-1,那么算术运算性质将得到满足。
在正整数的情况下,an-1=0, 故-2n-1an-1 = 0,这样表达式定义了一个非负整数。
不同位长间的转换:
2的补码整数的扩展规则是,移符号位到新的最左位,其余空出位均以符号位的值填充。即对于正整数填充0,对于负整数填充1。
取负:
1)将整数的每一位(包括符号位)取反(布尔反),即把每个1变为0,0变为1.
2)将此取反结果作为一个无符号二进制整数对待,加1。
加法:
2的补码的加法执行过程与无符号整数加法一样。得考虑溢出。
减法:
求出减数2的补(取负),并把它加到被减数上。