原码、反码、补码

原码

原码由第一位的符号位和后面的数值位构成,如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) 只有一种表示方法

原文地址:https://www.cnblogs.com/fenggwsx/p/15313866.html