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)
/

码制计算题考试考得较少,一般只考察概念

例题

image-20240328213123422

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

image-20240328213132531

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

image-20240328213143210

解析:题干为16位补码,而非176位

码制 计算方法 计算结果
补码 FFFFH转换为二进制,最高位为符号位 1 111 1111 1111 1111
反码 补码减去1(负数补码是反码加1) 1 111 1111 1111 1110
原码 符号位不变,其余位取反 1 000 0000 0000 0001

站内搜索

没有找到内容!