原码
原码由第一位的符号位和后面的数值位构成,如32位二进制中:
数值 | 原码 |
---|---|
(1) | (0000 0000 0000 0000 0000 0000 0000 0001) |
(-1) | (1000 0000 0000 0000 0000 0000 0000 0001) |
(2147483647) | (0111 1111 1111 1111 1111 1111 1111 1111) |
(-2147483647) | (1111 1111 1111 1111 1111 1111 1111 1111) |
(0) | (0000 0000 0000 0000 0000 0000 0000 0000) (1000 0000 0000 0000 0000 0000 0000 0000) |
所以32位二进制用原码表示的范围是 ([-2147483647, 2147483647]),其中 (0) 有两种表示方法,因为 (0) 是不分正负的
反码
正数的反码是其原码本身,负数的反码是符号位不变,数值位的每一位都取反,如32位二进制中:
数值 | 反码 |
---|---|
(1) | (0000 0000 0000 0000 0000 0000 0000 0001) |
(-1) | (1111 1111 1111 1111 1111 1111 1111 1110) |
(2147483647) | (0111 1111 1111 1111 1111 1111 1111 1111) |
(-2147483647) | (1000 0000 0000 0000 0000 0000 0000 0000) |
(0) | (0000 0000 0000 0000 0000 0000 0000 0000) (1111 1111 1111 1111 1111 1111 1111 1111) |
所以32位二进制用反码表示的范围是 ([-2147483647, 2147483647]),其中 (0) 有两种表示方法
补码
正数的补码是其原码本身,负数的补码是其反码加 (1),如32位二进制中:
数值 | 反码 |
---|---|
(1) | (0000 0000 0000 0000 0000 0000 0000 0001) |
(-1) | (1111 1111 1111 1111 1111 1111 1111 1111) |
(2147483647) | (0111 1111 1111 1111 1111 1111 1111 1111) |
(-2147483647) | (1000 0000 0000 0000 0000 0000 0000 0001) |
(0) | (0000 0000 0000 0000 0000 0000 0000 0000) |
(-2147483648) | (1000 0000 0000 0000 0000 0000 0000 0000) |
所以32位二进制用反码表示的范围是 ([-2147483648, 2147483647]),其中 (0) 只有一种表示方法