为什么两个二进制的补码相加时,和的符号位等于两数的
对于无符号数而言,没有什么原码、反码、补码的概念,只有绝对值。
对于带符号数,才会有采用什么码型来表示的问题。10000000确实是-128的补码。对于带符号数,最高位是符号位,0表示正数、1表示负数,始终不变。所有的码型换算,都只针对低位的绝对值部分进行。
例如12的原码是00001100,-12的原码是10001100。对其绝对值部分0001100求反加1得1110100,最高位添上符号位1,就是补码11110100。
所以码型转换运算只针对绝对值部分,不针对符号位,符号位始终不变。
扩展资料:
负数的补码:
负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的。
1、补码的得来:是为了让负数变成能够加的正数,所以,负数的补码=模-负数的绝对值:比如:-1 补码:1111 1111(0000 0001,也就是-1的绝对值,取反加1得来)当一个数要减1的时候,可以直接加 1111 1111。
2、原码的得来:(负数的原码,直接把对应正数的最高位改为1)原码能够直观的表示一个负数(能直观的把真值显示出来,如 -1为1000 0001其中最高位表示符号位,不进行算术计算)
3、反码和补码之间转换:补码= 反码+1
4、现在来推-128的补码:-128的补码:1000 0000 - 1000 0000(+128没有符号位)=1000 0000
-128的反码:1111 1111(1000 0000 +1=1000 0000+1111 1111=1111 1111)。
-128的原码:1000 0000(反码取反)。
往回推:-128的原码 1000 0000 (-128,进位被舍去)、-128的反码 1111 1111。
-128的补码 1000 0000(1111 1111(反码) + 1=1000 0000,这里实际上真正相加的是、1111 1111后面的7位,第1位是符号位始终不会变。
所以,当进到第8位的时候,就表示溢出了,会被舍弃)。
5、 0只有一个补码0000 0000(听说可以证明的),如果是这样,那么1000 0000就不会表示成-0的补码。即:补码1000 0000唯一的表示-128。
在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个。
对于带符号数,才会有采用什么码型来表示的问题。10000000确实是-128的补码。对于带符号数,最高位是符号位,0表示正数、1表示负数,始终不变。所有的码型换算,都只针对低位的绝对值部分进行。
例如12的原码是00001100,-12的原码是10001100。对其绝对值部分0001100求反加1得1110100,最高位添上符号位1,就是补码11110100。
所以码型转换运算只针对绝对值部分,不针对符号位,符号位始终不变。