原码、反码和补码举列
原码、反码和补码举列
以10 和负10举例
| 数值10的二进制 | 数值负10的二进制 | 10+(-10) | 正数口诀 | 负数口诀 | |
|---|---|---|---|---|---|
| 原码 | 0000 1010 | 1 000 1010 | =1 001 0100 发现结果是错误的 |
正数即本身 | 最高位为符号位(注:红色字体为高位) |
| 反码 | 0000 1010 | 1 111 0101 | = 1 111 1111 这个结果为负的128显然不太对 |
正数即本身 | 高位不变,其余的按位取反) |
| 补码 | 0000 1010 | 1 111 0110 | =0 000 0000 显然补码比较适合 |
正数即本身 | 取反码的二进制结果各位加1变成了 逢二进一(绿色字体) |
最高位为符号位(从右往左第一个)0表示正数,1表示负数,非符号的代表该数字绝对值的二进制。
- 有符号的1bit可以表示为 1 111 1111 取值范围-128->+127
- 无符号的1bit可以表示为 1 111 1111 取值范围0->256
计算机用的是补码吗,为什么计算机中要采用补码?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值一并处理,不需要单独的处理符号位而降低复杂度,使得加法和减法也可以统一处理(为什么要用补码,好处是什么?)。
为了表示二进制数,如果直接用源码形式,需要额外的硬件(缺点)区分符号位0,1;
如果用反码,无需硬件分辨符号位,但是0由两种表达方式(缺点);
那么选用补码的话,0只有一种表达方式,而且比别的表达方式多表达一个数(优点)
用补码计算3-2,那就用(+)3的补码加上(-2)的补码
也就是011+110=(1)001 //进位要舍去,这样减法也可以用加法来运算,不用判断符号位;
计算1-3:
001+101=110 (-2)
5+(-7)例子


浙公网安备 33010602011771号