1-2 机器数与码制
机器数:计算机都采用二进制,即只认识0和1
现实世界:数值型数据(1,2,3…)和非数值型数据(字符、图像、声音)
计算机表示数值数据时,为了方便运算,带符号数采用原码、反码、补码和移码等编码方式,这种编码方式称为码制。
原码、反码、补码和移码
| 码制 | 定义 | 数值0表示 | 8位表示范围 | 备注 |
|---|---|---|---|---|
| 原码 | 最高位为符号位,0表示正数,1表示负数 | 有+0和-0两种表示 | -127~+127 | 无 |
| 反码 | 正数的反码与原码相同; 负数符号位不变,其余位取反 |
有+0和-0两种表示 | -127~+127 | 无 |
| 补码 | 正数的补码与原码相同; 负数的补码在反码基础上加1 |
只有一种表示法,即:00000000 | -128~+127 | 适合数字加减运算 |
| 移码 | 在补码基础上符号位取反 | 只有一种表示法,即:10000000 | -128~+127 | 适合浮动数阶码计算 |
注意:上述表格中的“8位表示范围”
- 对于原码和反码则是-127~+127,因为0占用了2个编码
- 对于补码和移码而言是-128~+127,因为0只占用1个编码
- 移码的具体数值范围取决于实际应用场景,通常用于阶码表示时,通过移码可以实现正偏移。
| 编码方式 | 数值 | 表示方法 |
|---|---|---|
| 原码 | +1 | 0 0000001 |
| 原码 | -1 | 1 0000001 |
| 反码 | +1 | 0 0000001 |
| 反码 | -1 | 1 1111110 (符号位不变,其余位取反) |
| 补码 | +1 | 0 0000001 |
| 补码 | -1 | 1 1111111 (反码基础上加1) |
| 移码 | +1 | 1 0000001 |
| 移码 | -1 | 0 1111111 (补码基础上符号位取反) |
几种编码总结
- 原码、反码和补码正数表示方法一样
- 原码和反码表示范围:-127~+127,正负0表示不一样
- 补码和移码表示范围:-128~+127,正负0表示一样
0的各种码制
| 十进制数字 | 原码 | 反码 | 补码 | 移码 |
|---|---|---|---|---|
| +0 | 0 0000000 | 0 0000000 | 0 0000000 (正数原反补码相同) | 1 0000000 |
| -0 | 1 0000000 | 1 1111111 | 0 0000000 负数补码是反码+1, 即 1 00000000,高位溢出**(超出表示范围时溢出无效)** |
1 0000000 |
| +128 | 超出表示范围 | 超出表示范围 | 超出表示范围 | / |
| -128 | 超出表示范围 | 超出表示范围 | -128的补码是 1 0000000 (原码、反码,正负零不一样,补码、移码正负零一样。多出一位,可以表示-128) |
/ |
码制计算题考试考得较少,一般只考察概念
例题

解析:8位补码的表示范围-128~+127,127+1将产生溢出,选择C

解析:补码和移码的0只有1种表示方法

解析:题干为16位补码,而非176位
| 码制 | 计算方法 | 计算结果 |
|---|---|---|
| 补码 | FFFFH转换为二进制,最高位为符号位 | 1 111 1111 1111 1111 |
| 反码 | 补码减去1(负数补码是反码加1) | 1 111 1111 1111 1110 |
| 原码 | 符号位不变,其余位取反 | 1 000 0000 0000 0001 |