定点数:小数点位置固定。
定点整数,通常默认小数在最末位。定点小数则通常默认小数点在符号位后面,如1.0100不表示1.几,而是-0.0100。
浮点数:小数点位置不固定。
可以用原码、反码、补码来表示定点整数和小数。用移码来表示定点整数。
无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。通常只用来探讨整数,而不是小数。
原码:第一位表示符号位,后面7位表示真值的绝对值。原码能表示的范围是关于原点对称的,有+0,-0的区分。
反码:若符号位为0,则反码和原码相同。
若符号位为1,则数值位全部取反。
能表示的数值范围、特征都和原码一致
反码只是原码转变为补码的一个中间状态,并没有什么实际作用。
补码:正数的补码=原码
负数的补码=反码末位+1(要考虑进位)
真值0只有一种表示形式。能表示的数值范围不对称,负数多表示一个。10...0是最大负数。
对于定点小数来说10...0表示-1 表示数值范围同样不对称,比原码能多表示一个-1.
从反码 --》推出原码,也是同样过程,尾数全部取反,末位加1。
补码的意义是:让处理器 可以使用加法器来完成减法运算。
移码:在补码的基础上,将符号位取反。
只能用来表示整数!!! 真值0同样只有一种表示形式,整数表示范围与补码相同。
移码可以很方便的比较大小。(从左到右对比,谁先出现1,则谁大。)如果把移码当成无符号数看待,随着真值增大,无符号数是递增的。
从x补到(-x)补的小技巧:符号位、数值位全部取反后,末位+1
加减运算
原码加减运算时,必须要判断符号位,且需要减法器。设计成本高。
mod(n) 其实是把整数分为n类,余数相同的数为同一类,姑且认为他们等价。同一类数字在加减时,效果是等价的。
在mod12的情况下 -3和9互为补数,二者绝对值之和=模。 如果能找到补数,则可以用正数的加法来替代减法。
计算机硬件的截断 就相当于Mod(2的n次方)
故,a的补数=模-a的绝对值