“为什么负数在计算机中要用补码表示”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
(建立内容为“因为取补码可以简化二进制加减法运算。 假如我们不使用补码,以4个字节的 int 为例,第1位是符号位,0代表正数,1代码…”的新页面)
 
第1行: 第1行:
 
因为取补码可以简化二进制加减法运算。
 
因为取补码可以简化二进制加减法运算。
 
  
 
假如我们不使用补码,以4个字节的 int 为例,第1位是符号位,0代表正数,1代码负数
 
假如我们不使用补码,以4个字节的 int 为例,第1位是符号位,0代表正数,1代码负数
第15行: 第14行:
 
|-
 
|-
 
| colspan="2" | -2就是:
 
| colspan="2" | -2就是:
|1000 0000  0000 0000  0000 0000 0000 0001
+
|1000 0000  0000 0000  0000 0000 0000 0010
 +
|}
 +
-2+1应该等于-1,这个时候我们发现:
 +
{| class="wikitable"
 +
|
 +
|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)
 +
|}
 +
这并不符合我们的期待。
 +
 
 +
 
 +
 
 +
相反,如果我们应用补码:
 +
{| class="wikitable"
 +
| +1是:
 +
|0000 0000  0000 0000  0000 0000 0000 0001
 +
|-
 +
| -1就是:
 +
|1111 1111  1111 1111  1111 1111 1111 1111
 
|}
 
|}
-2+1应该等于-1,这个时候我们发现
 

2022年9月3日 (六) 10:31的版本

因为取补码可以简化二进制加减法运算。

假如我们不使用补码,以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就是: 1111 1111 1111 1111 1111 1111 1111 1111