5、大话原码、补码、反码、移码
原码 = 最高位 + 低位(7位二进制数),
最高位 0 表示正数,1表示负数
低位即该数字的二进制数
7 的原码 00000111,
-7 的原码 10000111,
0000111 为 7 的二进制数(七位二进制数)
正数的反码 = 原码
负数的反码 = 除最高位,其余位(低位)取反即可。
-7 的原码 10000111,反码为: 11111000
正数的补码=原码
负数的补码 = 反码 + 1
-7 的原码 10000111,反码为: 11111000,补码为 11111001
正数、负数的移码 = 补码最高位取反
-7 的原码 10000111,反码为: 11111000,补码为 11111001,移码为 01111001
表示范围:
记住原码的,然后推导即可:
原码的表示范围为 -127-127,即:1111 1111 - 0111 1111
原码、反码、补码、移码的最高位表示符号,不代表范围、数值等含义,仅代表符号(正负)。
64 + 32 + 16 + 8 + 4 + 2 + 1 = 127
原码的优点是直观,缺点是加法、减法运算复杂,需要额外的规则来处理符号位;
反码的优点是加减法运算规则简单,只需对应位相加并进位,缺点是反码存在两个零值:正零和负零;
补码的优点是只有一个零值,可以直接进行加减运算,而不需要额外的规则,可以通过减法运算实现加法,从而简化了计算机的逻辑电路设计;
移码的主要用途是在浮点数中对指数部分进行表示,使得指数部分可以用带符号数进行表示和运算,方便了浮点数的处理和运算。
码制 | 定点整数 |
---|---|
原码 | -127 ~ 127 |
反码 | -127 - 127 |
补码 | -128 - 127 |
移码 | -128 ~127 |
阶符 表示 阶码的正、负,阶码本身是整数
数符 表示 尾数 的正、负,尾数本身是小数
N = 2E * M,E 为 阶码,M 为 尾数,2称为阶码的底
比如 123456 = 1.23456 * 105
r: 10,E:5,M:1.23456
问题:
某个机器的浮点数表示格式如下(允许非格式化表示)。若阶码以补码表示,尾数以原码表示,则 1 0001 0 0000000001 表示的浮点数是()
1 0001 0 0000000001
阶码以补码表示,则:1 0001 为补码,最高位 1 为 阶符,表示负数。
则需要求改补码的原码:补码的补码 = 原码
1 0001 的反码:负数的反码 = 除最高位,其余位取反,所以 1 0001 的反码 =》1 1110 =》1 1110 的补码:负数的补码 = 反码 + 1 => 1 1110 的补码 =》 1 1111
所以 1 0001 (为补码)的原码就是 1 1111,所以阶码为:-(8 + 4 + 2 + 1) = -15
尾数以原码表示,所以尾数的二进制为 0 0000000001,原码对应的二进制数字为(尾数为小数):十位,就是 0 * 2-1 + 0 * 2-2 + … + 1 * 2-10
所以答案是:
2-15 * 2-10
同理的题目:
设 16位浮点数,其中阶符 1位,阶码值 6 位,数符 1 位,尾数 8 位。若阶码用移码表示,尾数用补码表示,则浮点数所能表示的数值范围:
????