关于带符号整数的反码,补码,真值,与原码的讨论。(还有判断正溢出和负溢出)

关于带符号整数的反码,补码,真值,与原码的讨论。(还有判断正溢出和负溢出)

1)整数的反码:
就是将该带符号整数的绝对值所对应的二进制数中的0变成1,1变成0。
举例子:(以8bits为例)
e.g.1: -1的绝对值为1,1对应的二进制数为00000001,则1的反码为11111110
e.g.2: -4的绝对值为4,4对应的二进制数为00000100,则4的反码为11111011
2) 带符号整数的补码:
在(1)中,我们已经完成了求一个带符号二进制整数的补码的第一步。得到了其绝对值的反码,第二个步骤就是将得到的反码加1就得到了该带符号二进制整数的补码。
举例子:(为便于诸君的理解,我仍以8bits为例,以下也是)
e.g.1: 1的反码为11111110,那么-1的补码为11111111
e.g.2: 4的反码为11111011,那么-4的补码为11111100
PS: 补码之所以会存在,是为了让负数变成能够进行‘+’运算的整数。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。负0与正0的表示方法相同。
3)带符号整数的真值
一个带符号整数的二进制数值称为真值
例如:
-7的二进制数值或真值为11111001
-128的真值是10000000
4)带符号整数的原码
原码表示法在数值的前面增加了一位符号位,即最高位为符号位。正数该位为0,负数该位为1。特别的是,与补码不同,正0与负0的原码表示方法是不同的。
例如:
正0的原码为00000000
负0的原码为10000000
-1的原码为10000001
原码即将该整数的绝对值的二进制数的最高位改变,视所要表示的数的正负情况。如果是正数,最高位填0;如果是负数,最高位填1。
5)二进制整数加法运算为何会产生溢出
在用补码方式表示n位带符号整数时,最大数为2的n次方-1,最小数为负的2的(n-1)次方。以8bits为例,最大数为127(对应的二进制数01111111),最小数为-128(对应的二进制数为10000000)。由于计算机中存在位数的限制,整数溢出的问题就是不可避免的。
总结起来,整数的加法运算会产生以下几种情况
#1:
两个正数相加,如果最高位变成了1,则产生了正溢出。
#2:
两个负数相加,如果最高位变成了0,则产生了负溢出。
#3:
一正一负相加,不会产生溢出。
6)Final Part
计算机中存储负数的方法:(8bits)
在这里插入图片描述其实,计算机中存储负数的方式有《易经》中“亢龙有悔”的意境。到127后,在加上1,反而变成了这几个比特所能表示的最小的数(-128),从正数的巅峰,一下子就落入到了最小的负数。也许我们也能从中领略到一点生命,生活和世界的道理。
随笔
不知不觉,来到大学已经半年了,刚刚接触计算机的这半年,有点困难,时间也过得很快。我在搞清楚原码,补码和真值时很久才搞明白。所以在此希望把自己的理解抛诸与此,同时也复习巩固。希望能与诸君多多交流,学习。
参考资料:
1.百度百科原码
2.百度百科补码
3.计算机科学导论-以Python为舟(第二版)-沙行勉教授

猜你喜欢

转载自blog.csdn.net/ecnu_lmxgofgt/article/details/85447257
今日推荐