计算机中的数据表示之原码反码补码移码

计算机中的数字表示

  • 一、无符号数
  • 二、有符号数
    • 1. 原码
    • 2. 反码
    • 3. 补码
    • 4. 移码

一、无符号数

寄存器中的每一位均可用来存放数值
n位的服务号数表示范围:0 ~ 2n-1 (即全0到全1)
假如机器字长16位,无符号数的表示范围是:0 —— 65535,即就是 16个0 —— 16个1( 216 - 1 = 65536 - 1 = 65535 )

二、有符号数

对于有符号的整数,小数点隐含在数值位的最后面;
对于有符号的小数,小数点隐含在符号位的后面;

以下有符号数相关推导公式统一用 n+1 位表示机器字长,数值位占 n 位

1. 原码

用机器字长第一位表示符号位,剩下的表示数值位,假设机器字长为8位(下同),可以表示为:
+8:[x] = 0000 1000
-8:[x] =1000 1000
红色标识符号位,“0”表示正,“1”表示负,下同
整数可表示的范围:[-(2n-1), 2n-1]

+0.75:[x] = 0110 0000
-0.75:[x] = 1110 0000
小数可表示的范围:[-(1-2-n), 1-2-n] (关于原点对称)

+0:[x] = 0000 0000
-0:[x] = 1000 0000
其中 0 的真值有 +0 和 -0 两种表示状态

2. 反码

反码是原码转变为补码的一个中间状态
正数的反码与原码相同,负数的反码是符号位不变,数值位取反
如:
+8:[x] = 0000 1000
-8:[x] = 1111 0111
整数可表示的范围:[-(2n-1),2n-1]

+0.75:[x] = 0110 0000
-0.75:[x] = 1001 1111
小数可表示的范围:[-(1-2-n), 1-2-n] (关于原点对称)
+0:[x] = 0000 0000
-0:[x] = 1111 1111
其中 0 的真值也有 +0 和 -0 两种表示状态

3. 补码

正数的补码=原码
负数的补码=反码+1
如:
+8:[x] = 0000 1000
-8:[x] = 1111 1000
整数可表示的范围:[-2n, 2n-1](比原码多表示一个-2n

+0.75:[x] = 0110 0000
-0.75:[x] = 1010 0000
小数可表示的范围:[-1, 1-2-n] (比原码多表示一个 -1)

对于0:
+0:[x] = 0000 0000
-0:[x] = (1)0000 0000(产生进位1,直接丢弃)
补码的真值 0 只会有一种表示状态,因此用 (1)000 0000这种状态表示 -27
规定最小的负数的补码永远是首位1,后面全0
助记:
-7:[x] = 1000 0111
-7:[x] = 1111 1000
-7:[x] = 1111 1001
-7减1:[x] = 1111 1000,对应的原码为: 1000 1000,即 -8

* 负数的补码形式转为原码:
[x] = 2n-1 - [x]

此外,补码具有循环特性,-1 的补码永远是{机器字长}个1,比如8位机器字长表示 -1 的补码是 1111 1111,加1就是(1)0000 0000(产生进位1,直接丢弃),结果对应的真值是0;8位机器字长最大的正数的补码是 0111 1111,加1之后,就是 1111 1111,又变回了 -1

4. 移码

在补码的基础上将符号位取反
⚠️注意:只能用于表示整数
作用:可以很方便的对比机器数大小,与真值大小对应
+8:[x] = 1000 1000
-8:[x] = 0111 1000
整数可表示的范围:[-2n, 2n-1](与补码相同)
+0:[x] = 1000 0000
-0:[x] = 1000 0000
移码的真值 0 也只会有一种表示状态
计算机中的数据表示之原码反码补码移码_第1张图片

你可能感兴趣的:(计算机学科基础综合)