原码反码补码移码简单介绍[一句话概括]

版权声明:luckyxs原创 https://blog.csdn.net/Adorable_0623/article/details/88567074

机器数和符号位

在学习原码,反码和补码之前 我们先来了解什么叫机器数和真值

  1. 机器数: 一个数在计算机中的二进制表示形式,叫做这个数的机器数
  2. 机器数是带符号的 在计算机中用一个数的最高位存放符号 正数为0 负数为1

比如 十进制中的数 +5 如果计算机字长为8位 转换成二进制的话就是 0000_0101

如果是 -5 就是1000_00101(原码)

真值

因为第一位是符号位 所以机器数的形式值不等于真正的数值 例如上面的有符号数 1000_0101 其最高位1代表负 其真正的数值是 - 5 而不是形式值 133 (10000101转换成十进制是133) 所以 为区别起见 将带符号位的机器数对应的真正数值称为机器数的真值

原码

原码就是符号位加上真值的绝对值 即用第一位表示符号 其余位表示值 比如如果是8位二进制:

[+1]原 = 0000_0001

[-1]原 = 1000_0001

因为第一位是符号位 所以8位二进制的取值范围是

[1111_1111,0111_1111] 即[-127,127]

这个地方要注意一下 不是[-128,127]或者[-128,128]

原码是人脑最容易理解和计算的表示方式

反码

反码就是 : 正数的反码是其本身 负数的反码是在其原码的基础上 【符号位不变】其余各个位【取反】

[+1] = [0000_0001]原 = [0000_0001]反
[-1] = [1000_0001]原 = [1111_1110]反

可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值,通常要将其转换成原码再计算。

补码

补码就是 : 正数的补码就是其本身。负数的补码是在其原码的基础上,【符号位不变】,其余各位取反,最后+1,即【取反+1】

[+1] = [0000_0001]原 = [0000_0001]反 = [0000_0001]补
[-1] = [1000_0001]原 = [1111_1110]反 = [1111_1111]补

对于负数,补码表示方式也是人脑无法直观看出其数值的,通常也需要转换成原码再计算其数值。

移码

移码最简单了,不管正负数,只要将其补码的符号位取反即可。

[+1] = [0000_0001]原 = [0000_0001]反 = [0000_0001]补 = [1000_0001]移

[-1] = [1000_0001]原 = [1111_1110]反 = [1111_1111]补 = [0111_1111]移

对于一个数 计算机要使用一定的编码方式进行存储 原码反码补码是机器存储一个具体数字的编码方式

猜你喜欢

转载自blog.csdn.net/Adorable_0623/article/details/88567074