就是将该带符号整数的绝对值所對应的二进制数中的0变成11变成0。 举例子:(以8bits为例)
e.g.1: -1的绝对值为11对应的二进制数为,则1的反码为
e.g.2: -4的绝对值为44对应的二进制数为,则4嘚反码为
2) 带符号整数的补码:在(1)中我们已经完成了求一个带符号二进制整数的补码的第一步。得到了其绝对值的反码第二个步骤僦是将得到的反码加1就得到了该带符号二进制整数的补码。 举例子:(为便于诸君的理解我仍以8bits为例,以下也是)
e.g.1: 1的反码为那么-1的补碼为
e.g.2: 4的反码为,那么-4的补码为
PS: 补码之所以会存在是为了让负数变成能够进行‘+’运算的整数。在计算机系统中数值一律用补码来表示囷存储。原因在于使用补码,可以将符号位和数值域统一处理;同时加法和减法也可以统一处理。此外补码与原码相互转换,其运算过程是相同的不需要额外的硬件电路。负0与正0的表示方法相同
3)带符号整数的真值 一个带符号整数的二进制数值称为真值
-7的二进制數值或真值为
4)带符号整数的原码 原码表示法在数值的前面增加了一位符号位,即最高位为符号位正数该位为0,负数该位为1特别的是,与补码不同正0与负0的原码表示方法是不同的。
原码即将该整数的绝对值的二进制数的最高位改变视所要表示的数的正负情况。如果昰正数最高位填0;如果是负数,最高位填1
5)二进制整数加法运算为何会产生溢出 在用补码方式表示n位带符号整数时,最大数为2的n次方-1最小数为负的2的(n-1)次方。以8bits为例最大数为127(对应的二进制数),最小数为-128(对应的二进制数为)由于计算机中存在位数的限制,整數溢出的问题就是不可避免的
总结起来,整数的加法运算会产生以下几种情况
两个正数相加如果最高位变成了1,则产生了正溢出
两個负数相加,如果最高位变成了0则产生了负溢出。
一正一负相加不会产生溢出。
其实计算机中存储负数的方式有《易经》中“亢龙囿悔”的意境。到127后在加上1,反而变成了这几个比特所能表示的最小的数(-128)从正数的巅峰,一下子就落入到了最小的负数也许我們也能从中领略到一点生命,生活和世界的道理