题目
设机器字长5位,请分别写出十进制[1]数±7 和±8 的补码表示;若机器字长4位,结果如何?(不用填符号位和数值位之间的间隔符号)
设机器字长5位,请分别写出十进制[1]数±7 和±8 的补码表示;若机器字长4位,结果如何?(不用填符号位和数值位之间的间隔符号)
题目解答
答案
00111#11001#01000#11000#0111#1001#溢出#1000
解析
补码表示是计算机中处理有符号整数的常用方法,其核心规则为:
- 正数的补码等于其二进制表示(符号位为0,数值部分为二进制数);
- 负数的补码等于其绝对值二进制取反后加1(符号位为1,数值部分为取反加1后的结果)。
机器字长决定了符号位和数值位的分配。例如,5位字长时,符号位占1位,数值位占4位;4位字长时,符号位占1位,数值位占3位。数值范围由数值位决定:
- 5位时,最大正数为$+7$(二进制$0111$),最小负数为$-8$(二进制$1000$);
- 4位时,最大正数为$+7$(二进制$0111$),最小负数为$-8$(二进制$1000$)。
若数值超出范围,则会发生溢出。
机器字长5位
+7的补码
- 符号位为0,数值部分为7的二进制(4位):$0111$
→ 补码:$0\ 0111 = 00111$
-7的补码
- 绝对值7的二进制:$0111$
- 取反:$1000$
- 加1:$1000 + 1 = 1001$
→ 补码:$1\ 1001 = 11001$
+8的补码
- 符号位为0,数值部分为8的二进制(4位):$1000$
→ 补码:$0\ 1000 = 01000$
-8的补码
- 绝对值8的二进制:$1000$
- 取反:$0111$
- 加1:$0111 + 1 = 1000$
→ 补码:$1\ 1000 = 11000$
机器字长4位
+7的补码
- 符号位为0,数值部分为7的二进制(3位):$111$
→ 补码:$0\ 111 = 0111$
-7的补码
- 绝对值7的二进制:$111$
- 取反:$000$
- 加1:$000 + 1 = 001$
→ 补码:$1\ 001 = 1001$
+8的补码
- 数值位仅3位,无法表示8(二进制$1000$),溢出。
-8的补码
- 在4位补码中,最小负数为$-8$,其补码直接表示为$1\ 000$
→ 补码:$1000$