数据的表示和计算
2.1 数制与编码
2.1.1 进位计数制及其相互转换
在计算机内部,所有信息都是用二进制编码的,原因如下:
- 二进制只有两种状态,易于用物理器件实现(如高低电平)。
- 二进制与逻辑值“真/假”对应,便于逻辑运算。
- 二进制编码和运算规则简单,可通过逻辑门电路方便实现。
常用进位计数制
- 二进制:基数为2,数码0/1,逢二进一。后缀B(Binary)。
- 八进制:基数为8,数码0~7,逢八进一。后缀O(Octal)。
- 十六进制:基数为16,数码0
9、AF,逢十六进一。后缀H(Hexadecimal)或前缀0x。 - 十进制:基数为10,数码0~9,逢十进一。后缀D可省略。
进制转换
1. 二进制 ↔ 八进制/十六进制
- 二进制转八进制:从小数点开始,整数部分向左,小数部分向右,每3位一组(不足补0),每组转换为1位八进制数。
- 二进制转十六进制:每4位一组转换为1位十六进制数。
- 反向转换:每位八进制(十六进制)转换为3位(4位)二进制。
2. 任意进制 → 十进制
按权展开相加法:将各位数码与位权相乘后求和。
例:
3. 十进制 → 任意进制
- 整数部分:除基取余法。除以基数,取余数为当前位(从低位到高位),商继续除,直到商为0。
- 小数部分:乘 基取整法。乘以基数,取整数部分为当前位(从高位到低位),小数部分继续乘,直到积为1.0或达到精度。
注意:十进制小数不一定能用二进制精确表示(如0.3),但任意二进制小数都可用十进制精确表示。
2.1.2 定点数的编码表示
真值和机器数
- 真值:带正负号的数值(如+15,-8)。
- 机器数:将符号数字化(0表示正,1表示负)后的编码。常用原码、补码、反码、移码。
定点表示
- 定点小数:小数点固定在符号位之后、数值最高位之前。表示纯小数。
- 定点整数:小数点固定在数值最低位之后。表示纯整数。
原码表示
- 最高位为符号位,其余位表示绝对值。
- 定义:(整数,n+1位含符号)
- 表示范围:,0有+0和-0两种表示。
- 优点:直观,乘除运算简单;缺点:加减运算复杂,0不唯一。
补码表示
- 正数补码与原码相同;负数补码等于模减去绝对值(或取反加1)。
- 定义:(整数,模)
- 表示范围:,比原码多表示一个最小负数。0的表示唯一。
- 优点:符号位与数值位一起参与运算,减法可转为加法。
- 补码与真值转换:正数不变;负数:符号位1,数值位取反加1。反之,补码符号位为1时,数值位取反加1得真值绝对值。
- 变形补码(模4补码):双符号位,00正,11负,用于ALU中检测溢出。
反码表示
- 正数反码与原码相同;负数反码为原码符号位不变,数值位取反。
- 表示范围同原码,0有+0和-0。很少用于运算,主要作为中间表示。