二进制原码、反码、补码

通常我们用4个字节也就是32位表示一个整数,最高一位是符号位。范围是-2,147,483,648 to 2,147,483,647,-231 ~231-1

为了讲解方便,我们用一个字节(byte)表示一个整数,如下:
十进制数字1的二进制表现形式: 0000 0001
十进制数字2的二进制表现形式: 0000 0010

有符号数和无符号的概念
规则:把二进制数中的最高位(最左边的哪位)用作符号位
对于有符号数,最高位被计算机系统规定为符号位(0为正,1为负)
对于无符号数,最高位被计算机系统规定为数据位

按照这种说法,比如有符号数+2 -2的原码形式:
+2= 0000 00010
-2=1000 00010

+1= 0000 0001
-1=1000 0001
————————————————————
1000 0010

我们发现-1+1的结果不得0?为了解决这个问题,在计算机学科中引入了原码、反码和补码的概念。在计算机中有符号数值都是以补码形势存在。

原码、反码、补码

原码:符号位:0表示正,1表示负; 数值位:数据真值的绝对值。
反码:正数的原码和反码一样,负数的反码是对应原码的符号位不变,数值部分按位求反。
补码:正数的原码、反码和补码一样,负数的补码等于反码加1

规则:
正数 原码=反码=补码
负数:反码=符号位不变,其它位取反
补码=反码+1

1的原码是 0000 0001
-1的原码是 1000 0001
-1的反码是 1111 1110
-1的补码是 1111 1111

重新计算-1+1的结果
1111 1111
0000 0001
——————————-
0000 0000

正数时负数时取值范围(8位)o的表示方式
原码最高位为0,其它位为数据真值最高位为1,其它位为数据真值-127 ~ +127+0 = 0 0000000
– 0 = 1 0000000
反码同上最高位为1,按原码每位对应取反-127 ~ +127[+0]= 00000000
[-0]反  = 11111111
补码同上在反码基础上加1 -128 ~ +127[+0]= [-0]= 00000000

⽤8位的⼆进制来表⽰⼀个数,它的范围是-128~127,⽤⼋位的⼆进制来表⽰,-128补码是10000000

n位补码表示数值的范围是:  -(2n-1)~+(2n-1-1)

Scroll to Top