32

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

 5 years ago
source link: https://blog.csdn.net/Adorable_0623/article/details/88567074?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

机器数和符号位

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

  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]移

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK