(0) 先给结论:
在计算机系统中,数值一律用补码来表示(存储.
主要原因==>
1. 使用补码,可以将符号位和其它位统一处理;
2. 同时,减法也可按加法来处理.
3. 另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃.
(1) 原码是什么样子
由于最高位是符号位:
+7 = 0000 0111B
-7 = 1000 0111B
(2) 反码是什么样子
+7 = 0000 0111B (和原码表示一样)
-7 = 1111 1000B (除了符号位,其他都取反)
(3) 补码是什么样子
+7 = 0000 0111B (和原码表示一样)
-7 = 1111 1001B (除了符号位,其他都取反,最低位还+1)
(4) 补码计算举例
以Java int类型举例:
Integer.MAX_VALUE= 0111 1111 1111 1111 1111 1111 1111 1111 = 2^31-1
Integer.MAX_VALUE+1 = 1000 0000 0000 0000 0000 0000 0000 0000 = -2^31
Integer.MAX_VALUE +1 + Integer.MAX_VALUE = 1111 1111 1111 1111 1111 1111 1111 1111 = -1