定点数的表示
无符号数:整个机器字长全为数值位,没有符号。 n位数的表示范围 0~(2^n) - 1
有符号数:最高位位符号位。0→正、 1→负号。 表示范围和码的形式有关。
不同的码
原码
最高位表符号,其他表示真值。
小数: 【-(1 - 2^-n) <= x <= 1 - 2^-n】 对称
整数: 【-((2^n) - 1) <= x <= (2^n) -1】对称
0的表示: 【+0】= 00000 【-0】=10000
补码
符号位始终不变,数值为变化。 <b><font color="#c41230">负数表示范围比正数多一。</font></b>
<b><font color="#c41230">正数数值为和原码一样,负数数值为各位取反,末位加一</font></b>
小数: 【-1 <= x <= 1-(2^-n)】
整数:【-2^n <= x <= (2^n)-1】
0的表示:唯一 【+0】=【-0】=00000
【-x】的补码 = 【x】补码 符号位取反,数值位取反+1
反码
<b><font color="#c41230">符号位始终不变,正数不变,负数符号位取反</font></b>
小数:【-(1-(2^-n) <= x <= 1-(2^-n)】对称和原码一样
整数: 【-((2^n)-1 <= x <=(2^n)-1)】
0的表示不唯一 【+0】= 00000 【-0】11111
移码:一般表示浮点数的阶码,只能表示整数。 <b><font color="#c41230">移码=补码的符号位取反</font></b>
定点数运算
移位运算
算术移位
对象是有符号数,移位过程中符号位不变
注意移位过程中的添补原则
左移:把数据往左移,小数点右移。数据被放大。
逻辑移位
把操作数视为无符号数
不管左右移,都是补0
循环移位【要理解】
带进位标识符:进位标志符号和数据位一起参与移位
不带进位标志符:不管左右移动,进位标志位也随着改变
加减运算:相加直接运行,相减求出减数的相反值变成相加
溢出判断
一位符号位:若参加运算的两个数符号位相同,且结果符号位与之不相同。则溢出。
双符号位:结果双符号位相同:未溢出。 结果符号位不同:溢出。 最高位是真正的符号。
整数类型及转换
有无符号的转换:最高位被当作符号位或者数值为,其余不变。
不同字长的整数转换
大字长 → 小字长:多余的高位直接去掉
<b><font color="#c41230">小字长 → 大字长:高位不够补符号位</font></b>