“为什么负数在计算机中要用补码表示”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
第1行: | 第1行: | ||
+ | https://www.bilibili.com/video/BV1F741137za | ||
+ | |||
因为取补码可以简化二进制加减法运算。 | 因为取补码可以简化二进制加减法运算。 | ||
2022年9月3日 (六) 10:46的最新版本
https://www.bilibili.com/video/BV1F741137za
因为取补码可以简化二进制加减法运算。
假如我们不使用补码,以4个字节的 int 为例,第1位是符号位,0代表正数,1代码负数
+1是: | 0000 0000 0000 0000 0000 0000 0000 0001 | |
-1就是: | 1000 0000 0000 0000 0000 0000 0000 0001 |
+2是: | 0000 0000 0000 0000 0000 0000 0000 0010 | |
-2就是: | 1000 0000 0000 0000 0000 0000 0000 0010 |
-2+1应该等于-1,这个时候我们发现:
1000 0000 0000 0000 0000 0000 0000 0010 | -2 | |
+ | 0000 0000 0000 0000 0000 0000 0000 0001 | +1 |
= | 1000 0000 0000 0000 0000 0000 0000 0011 | -3 |
这并不符合我们的期待。
相反,如果我们应用补码:
+1是: | 0000 0000 0000 0000 0000 0000 0000 0001 |
求-1的补码形式,先求反码_负数符号位是1,其余位按位取反: | 1111 1111 1111 1111 1111 1111 1111 1110 |
-1的补码,在反码的基础上+1 | 1111 1111 1111 1111 1111 1111 1111 1111 |
+2是: | 0000 0000 0000 0000 0000 0000 0000 0010 |
求-2的补码形式,先求反码_负数符号位是1,其余位按位取反: | 1111 1111 1111 1111 1111 1111 1111 1101 |
-2的补码,在反码的基础上+1 | 1111 1111 1111 1111 1111 1111 1111 1110 |
-2+1就是
1111 1111 1111 1111 1111 1111 1111 1110 | -2 | |
+ | 0000 0000 0000 0000 0000 0000 0000 0001 | +1 |
= | 1111 1111 1111 1111 1111 1111 1111 1111 | -1 |
得到了我们期待的答案,不需要再判断正、负数,直接就可以做加、减法运算了