各种码
真值 (书写用):
将用“+”、“-” 表示正负的二进制数称为真值
机器不能识别书写格式,故用“0/1”表示“+/-”符号。
机器码 (机器内部使用):
将符号和数值一起编码表示的二进制数称为机器码。
常用机器码:原码、 反码、 补码、移码
- 原码
- 反码
- 补码
- 移码
原码
若定点小数的原码形式为 x0 . x1 x2 ··· xn注意中间有个小数点(共n+1位,x0为符号位),则原码表示的定义:
下面给出示例
若定点整数的原码形式为 x0 x1 x2 ··· xn,则原码表示的定义是:
示例
对于0,原码机器中往往有**“+0”、“-0”**之分,即:
- 小数:[+0]原=0.000…0
[-0]原=1.000…0 - 整数:[+0]原=0000…0
[-0]原=1000…0
反码
反码其符号位和原码相同, 真值是正数时,反码与原码 相同;真值是负数时,反码数值位为真值数值位取反。
定点小数反码的定义
定点整数反码的定义
【例 】已知机器字长 8位,对于数值0,分别给出其原码 、反码的编码。
【解】
原码:
+0:0000,0000 B → 00 H
-0:1000,0000 B → 80 H
反码:
+0:0000,0000 B → 00 H
-0:1111,1111 B → FF H
补码
若定点小数的补码形式为 x0 .x1 x2 ··· xn-1xn,则补码表示的定义是:
若定点整数的补码形式为 x0 x1 x2 ··· xn,则补码表示的定义是:
补码的表数范围
n+1位补码整数: −2n次方 ~ 2n次方 − 1
n+1位补码小数: −1 ~ 1− 2(-n 次方)
若补码整数的位数是8位,其表数范围: -128 ~ +127
若补码整数位数是16位,其表数范围: -32768 ~ +32767
若补码小数的位数是8位时,其表数范围:
- 1 ~ 1- 2(-7次方) 即 -1 ~ +127/128
若补码小数的位数是16位时,其表数范围:
- 1 ~ 1- 2(-15次方)
补码编码的求解方法
正数直接取其原来的二进制码,符号位为0
负数:
方法一:直接求解,真值数值位逐位取反,末位加1,符号位为1;
方法二:扫描法,从最右侧向左扫描,直到找到第一个1,该数位内容不变,其左侧所有数据位取反,其他数据位不变,符号位为1。
一般情况下第二种方法应该是最快的
熟练记住第二种方法
移码
移码通常用于表示浮点数的阶码。
假设定点整数移码形式为 x0x1 x2 ··· xn-1xn时,移码的定义是:
移码和补码的关系
即数x的补码和移码进行转换时,数值位不变,符号位取反。
下图常考点!!!