数值数据的编码【笔记】
1.求一个负数的补码,先求出这个负数对应的正数的原码,连同符号位按位取反,末位加一。
2.已知一个负数的补码,如何求其真值?
将这个负数的补码,连同符号位按位取反,末位加一,就是这个负数真值的绝对值,再调整其符号位。
3.补码的符号位扩展
(1)定点小数:后面直接添“0”。
(2)定点整数:一个正数的补码(n位)要用(2n)位表示,直接在这个正数补码的前面添加n个“0”。
一个负数的补码(n位)要用(2n)位表示,直接在这个负数补码的前面添加n个“1”。
也就是说,直接在定点整数的补码前面添加符号位即可。
4.补码的算术右移(除2运算)
正数的补码右移,低位舍掉,高位补0
负数的补码右移,低位舍掉,高位补1
总之,已知X的补码,求(1/2)X的补码,就是把X的补码整体右移1位,低位舍掉,高位填充原来的符号位。
5.补码的算术左移(乘2运算)
已知[X]补,求[2X]补。(需增加一位二进制位,或者说将模扩大1倍)
只需将[X]补的各位左移1位,末位补0。
6.变形补码:采用双符号位。左符是真正的符号位,右符用来判别“溢出”。
当使用变形补码(双符号位)进行运算时,若运算结果的两个符号位相同,则不发生溢出;若运算结果的两个符号位相异,则结果溢出。此时,最高位为符号;次高位为溢出的数值而非符号。
7.在计算机中,有符号整数用补码表示;浮点数的阶码用移码表示,浮点数的尾数用原码表示,尾数的符号位在最高位(第1位)。
8.移码与补码之间的转换:符号位取反即可。