1.定点数的表示
1.1无符号数的表示(只有整数,没有小数)
n位的无符号数表示范围为:0 ~ 2n -1
1.2有符号数的定点表示
1.2.1原码
原码
:用尾数表示真值的绝对值,符号位“0/1”对应“正/负”
若机器字长n+1位,原码整数
的表示范围: - ( 2n -1) ~ 2n -1
若机器字长n+1位,原码小数
的表示范围: - ( 1-2-n ) ~1- 2-n
1.2.2反码
反码
:若符号位为0,则反码与原码相同
若符号位为1,则数值位全部取反
若机器字长n+1位,反码整数
的表示范围: - ( 2n -1) ~ 2n -1
若机器字长n+1位,反码小数
的表示范围: - ( 1-2-n ) ~1- 2-n
1.2.3补码
补码
:正数的补码 = 原码
负数的补码 = 反码末位+1(要考虑进位)
补码的真值0只有一种表示形式
采用补码表示时,若符号位相同,则数值位越大,码值越大。
★定点整数补码 [x]补 = 1,0000000 表示 x = -27,补码中最小的数
若机器字长n+1位,补码整数的表示范围:−2n ≤ x ≤ 2n −1 (比原码多表示一个 −2n )
定点小数补码 [x]补 = 1.0000000 表示 x = -1
若机器字长n+1位,补码小数的表示范围:−1 ≤ x ≤ 1−2-n (比原码多表示一个 −1 )
1.2.4移码(只能表示整数)
补码的基础上将符号位取反
移码全0真值最小,移码全1真值最大;移码表示的整数很方便对比大小
移码的真值0只有一种表示形式
若机器字长n+1位,移码整数的表示范围:−2n ≤ x ≤ 2n −1 (与补码相同)
1.2.5由[x]补求[-x]补
符号位、数值位全部取反,末位+1
1.2.6由[x]补求[x]原
同[x]原求[x]补
1.2.7由[-x]补求[x]原
负数补→原:①数值位取反+1;
或 ②负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码
2.移位运算
2.1算数移位
符号位保持不变,仅对数值位进行移位。
2.1.1正数
正数的原码、补码与反码都相同,因此移位后出现的空位均以0添之。
2.1.2负数
2.1.2.1原码
2.1.2.2反码
反码的算数移位――负数的反码数值位与原码相反,因此负数反码的移位运算规则如下,
右移:高位补1,低位舍弃。
左移:低位补1,高位舍弃。
2.1.2.3补码
补码的算数移位――负数补码=反码末位+1导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。
规律――负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码
负数补码的算数移位规则如下:
右移(同反码):高位补1,低位舍弃。
左移(同原码):低位补0,高位舍弃。
2.1.3总结
2.2逻辑移位
逻辑右移:高位补0,低位舍弃。
逻辑左移:低位补0,高位舍弃。
2.3循环移位
3.加减运算
3.1原码的加减运算
3.2补码的加减运算
对于补码来说,无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算
。补码运算回原码就是我们真正计算的值
,当然可能会发生溢出。
4.溢出判断
只有“正数+正数 ”才会上溢(正溢出) —— 正+正=负
只有“负数+负数 ”才会下溢(负溢出) —— 负+负=正
4.1一位符号位(模2补码)
4.2采用一位符号位(模2补码),根据数据位进位情况判断溢出
4.3双符号位(模4补码)
4.4符号扩展
5.强制类型转换
5.1有符号数和无符号数之间的转换。
不改变数据内容,改变解释方式
。
例如,由, signed型转换为等长unsigned型数据时,符号位成为数据的一部分,即负数转换为无符号数时,数值将发生变化。同理,由unsigned转换为signed 时最高位作为符号位,也可能发生数值变化。
5.2长整数变短整数
高位截断,保留低位。
5.3短整数变长整数
符号扩展。见本节4.4