定点数的表示
定点数:小数点的位置固定 常规计数
浮点数:小数点的位置不固定 科学计数法
n位无符号数表示范围:0~2n-1
定点整数:默认小数点隐藏在最低位
定点小数:默认小数点隐藏在最高位
原码整数表示范围:-(2n-1)~2n-1
补码整数表示范围:-2n~2n-1
原码小数表示范围:-(1-2-n)~1-2-n
补码小数表示范围:-1~1-2-n
原码:0正1负(+0 -0)
反码:若符号位为0则反码=原码。若符号位为1则数值位全部取反(+0 -0)
补码:正数补码=原码 负数补码=反码末位+1(要考虑进位) (0)
移码:将补码的符号位取反 只能表示整数 用于比较大小 (0)
正数:原码=反码=补码
负数:反码=原码数值位全部取反 补码=反码末位+1 (原转补与补转原规则一致)
技巧:快速由(x)补求(-x)补:符号位、数值位全部取反,末位+1
如机器字长为8,则
真值19 原码:00010011 反码:00010011 补码:00010011 移码:10010011
真值-19 原码:10010011 反码:11101100 补码:11101101 移码:01101101
真值+0.75 原码:01100000 反码:0.1100000 补码:0.1100000
真值-0.75 原码:11100000 反码:1.0011111 补码:1.1000000
补码:让减法转化为等价的加法操作:88-66
88原码:01011000
-66原码:1100 0010 -66反码:1011 1101 -66补码:1011 1110
88-66=01011000+10111110=1 0001 0110最高位1省略(只保留8bit)得结果0001 0110即22D
注:执行加法操作时符号位也一起参与运算
由补码得到原码:以补码最右边的1为分界点,其左边全部取反右边不动即可得到原码
定点数的运算
移位
通过改变数码位和小数点的相对位置改变各数码位的位权
左移丢高补低,右移丢低补高 左移相当于2右移相当于/2
原码移位:符号位不变,仅对数值进行移位 右移n位,高位补0,丢弃低位,若丢弃位为0则=除2n,丢失位为1会丢失精度
左移n位 ,低位补0,丢弃高位,若丢弃位为0则=乘2n,否则会出现严重失误
反码移位:正数移位与原码移位相同 负数移位 右移高位补1,低位丢弃,左移低位补1,丢弃高位
补码移位:正数移位与原码移位相同 负数移位,右移高位补1,低位舍弃, 左移低位补0,高位舍弃
总结:左移丢高补低,右移丢低补高;正数均补0;负数原0反1 补码左0右1
逻辑移位:左移低位补0右移,高位补0,相当于无符号移位
循环移位:移出的数用来补位
-207:
7D=111B=20+21+22
-20*7=-20不移位+(-20)左移1位+(-20)左移两位
原码的加减法
正+正:绝对值做加法,结果为正
负+负:绝对值做加法,结果为负
正+负:绝对值大的-绝对值小的=正数原码+(负数补码),符号同绝对值大的数
负+正:绝对值大的减绝对值小的,符号同绝对值大的数
补码的加减运算
A=15,B=-24
A+B=24-15=24原+(-15)补=0001 1000+1111 0001=0000 1001 符号同-24 所以A+B=1000 1001
(A+B)补=A补+B补=0000 1111+1110 1000=1111 0111
(A-B)补=A补+(-B)补