如何将一个数存进计算机,此数的真值为-101.5,我们需要考虑什么? 需要考虑三个问题:①符号位“-”;②数码==“1015”;③小数点
符号位的处理:
无符号
- 无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。
- 若机器字长为8位,则数的表示范围为0~(2^8-1),即0 ~ 255
有符号
- 有符号数:将符号数字化,0表示正号,1表示负号。
- 符号数的表示方法:原码、补码、反码。
相关概念
概念 | 解析 |
---|---|
真值 | 用正负号表示正数和负数,这样的数值称为真值 |
机器数 | 用1位数码0或1表示正数和负数,这样的数值称为机器数 |
原码 | 1表示正数,0表示负数;有效值用二进制的绝对值表示 |
补码 | 正数的补码=原码,负数的补码符号为“1”,数值部分取反+1 |
反码 | 正数的反码=原码,负数的反码符号为“1”,数值部分取反 |
①三种码的转换
例:设x=-1101,那么[x]原、[x]补、[x]反分别为?并且将[x]补转换为[x]原?
[x]原=1,1101
[x]补=1,0011
[x]反=1,0010将[x]补=1,0011除了符号位外各位取反+1,得1,1101=[x]原
②[0]原、[0]补、[0]反
+0 | -0 |
---|---|
[+0.0000]原=[0.0000] | [-0.0000]原=[1.0000] |
[+0.0000]补=[0.0000] | [-0.0000]补=[0.0000] |
[+0.0000]反=[0.0000] | [-0.0000]反=[1.1111] |
综上所述:“0”的原码和补码均有两种,而补码只有一种。移码也仅有一种。
③已知[x]补,求[-x]补
例:已知[x]补=1.0010010,求[-x]补?
首先将1.0010010连同符号位取反,得到0.1101101,然后加上1,得到[-x]补=0.1101110
无论真值是正数还是负数,只要将[x]补连同符号位在内取反,末位+1,即可得到[-x]补。
④无符号数与有符号数的范围区别
同样的一个字节,无符号数的最大值为255,而有符号数的最大值为127,原因是有符号数的最高位被挪去当作符号。
x | 范围 |
---|---|
无符号数x | 0≤x≤255 |
有符号数x | -128≤x≤127 |
⑤移码:移码(又叫增码)是符号位取反的补码
缘由:用补码表示阶码的时候,当阶码无限小,产生了下溢的时候,阶码变成了0,那么这个浮点数的值变为了1。
假设补码的符号位为0,加上2^n,则0就变成了1;
如果补码的符号位是1,加上2^n,则变成10,由于最高符号位进位需要舍弃,因此又变成了0.