取反的疑惑 ( 积分: 20 )

  • 主题发起人 主题发起人 liuguilg
  • 开始时间 开始时间
L

liuguilg

Unregistered / Unconfirmed
GUEST, unregistred user!
x1,x2 :integer;
x1 := 1; x2 := not x1; 结果x2是-2
x1 := 2; x2 := not x1; 结果x2是-3;

integer是32位 ,x1:= 1的时候 二进制应该是000000000000000000000000000001;
怎么取反结果是-2了 我对-2的二进制理解是100000000000000000000000000010;
或许可能的的思路是错的; 希望各位老师指点
 
x1:=1 二进制应该是000000000000000000000000000001
not x1 二进制应该是11111111111111111111111111111110
为-2的二进制补码。
-2^31+2^30+...+2^1+0 = -2;

1+(-2) = -1;
二进制补码相加
00000000000000000000000000000001
+
11111111111111111111111111111110
=
11111111111111111111111111111111

-2^31+2^30+...+2^1+1 = -1;

OK!
 
明白了吧
 
在微机的底层电路内有符号数一律用补码表示,正数的补码等于它本身,负数的补码等于按位取反加一,not x1 二进制是11111111111111111111111111111110
除最高位符号位外其他按位取反后是10...1,加一后等于10...10(负二)(注意,最高位是符号位,不参与取反加一过程)。
为何底层电路要使用补码来表示有符号数字?因为补码能大为简化cpu的加法器电路设计。使得有符号数能和无符号数一样直接相加。以及能把减法运算补码后作为加法运算。

而 not操作是底层按位取反,所以,得到的都是被补码的二进制。
 
谢谢
发分
 

Similar threads

D
回复
0
查看
926
DelphiTeacher的专栏
D
D
回复
0
查看
718
DelphiTeacher的专栏
D
后退
顶部