【知识】原码、反码、补码

 

一、真值、机器数(原码、反码、补码)定义

真值

一般书写表示的数

X=-110 0111,y=110 0110

机器数

原码

符号位+数值

[x]原=1110 0111,[y]原=0110 0110

反码

正数的反码是符号位0+数值;

负数的反码是符号位1+数值各位取反

[x]反=1001 1000,[y]反=0110 0110

补码

正数的补码是符号位0+数值;

负数的补码是符号位1+数值各位取反后,最低位加1

[x]补=1001 1001,[y]补=0110 0110

二、0的机器数

真值

000 0000

-000 0000

机器数

原码

[+0]原=0000 0000

[-0]原=1000 0000

反码

[+0]反=0000 0000

[-0]反=1111 1111

补码

[+0]补=0000 0000

[-0]补=0000 0000

注:0的原码、反码表示方法有两种,0的补码表示方法唯一

三、表示范围

机器数

原码

无符号

0000 0000~1111 1111

0~255

有符号

1111 1111~0111 1111

-127~127

反码

有符号

1000 0000~0111 1111

-127~127

补码

有符号

1000 0000~0111 1111

-128~127

注:建议记住上表结论即可

1、1000 0000反=1111 1111原=-127

   1111 1111反=1000 0000原=-0

2、1000 0000补=1111 1111反=1000 0000原=-128发生了溢出,不能影响符号位  ???

1111 1111补=1111 1110反=1000 0001原=-1

机器数

原码

无符号

0~2^n-1

有符号

-2^(n-1)+1~2^(n-1)-1

反码

有符号

-2^(n-1)+1~2^(n-1)-1

补码

有符号

-2^(n-1)~2^(n-1)-1

注:建议记住上表结论即可

没有指明编码方式,计算机n位二进制无符号数的范围是0~2^n-1,有符号数的范围是-2^(n-1)+1~2^(n-1)-1

四、总结

       1、原码:

             0表示方法不唯一;

             计算结果会错误:   1 - 1 = 1 + (-1) = 0000 0001(原 )+ 1000 0001(原 )= 1000 0010(原) = -2

       2、反码:

            0表示方法不唯一;

            计算结果正确:   1 - 1 = 1 + (-1) = 0111 1110(反 )+ 1111 1110(反 )= 0000 0000(反) = 0

       3、补码:

           实现0表示方法的唯一性;

           减法用加法形式来运算;

           能多表示一个最小数(如8位,范围是-128~127,规定用1000 0000来表示-128,最小数逻辑上没有对应的原码)