题目
写出下列各整数的原码[1]、反码、补码表示(用8位二进制[2]数)。写出两个数的补码相加的运算过程及结果,并判断是否发生溢出。(1) -127(2) -1
写出下列各整数的原码[1]、反码、补码表示(用8位二进制[2]数)。写出两个数的补码相加的运算过程及结果,并判断是否发生溢出。
(1) -127
(2) -1
题目解答
答案
(1) -127的原码:11111111,反码:10000000,补码:10000001。
(2) -1的原码:10000001,反码:11111110,补码:11111111。
补码相加:
\[
10000001 + 11111111 = 110000000
\]
丢弃最高位1,结果为10000000,即-128。
根据补码规则,-128在8位表示范围内(-128 ~ +127),未发生溢出。
答案:
- -127的补码:10000001。
- -1的补码:11111111。
- 相加结果:10000000(即-128)。
- 判断:未发生溢出。
解析
本题主要考查整数的原码、反码、补码的表示方法,以及补码相加运算和溢出判断的知识。解题思路如下:
- 原码、反码、补码的表示规则:
- 对于正数,原码、反码、补码相同,最高位为符号位(0 表示正),其余位表示数值大小。
- 对于负数,原码的最高位为符号位(1 表示负),其余位表示数值大小;反码是在原码的基础上,符号位不变,其余位取反;补码是在反码的基础上加 1。
- 补码相加运算:直接将两个数的补码进行二进制加法运算。
- 溢出判断:在 8 位二进制补码表示中,能表示的范围是 -128 到 +127。若运算结果超出这个范围,则发生溢出。
(1)求 -127 的原码、反码、补码
- 原码:
- 因为 -127 是负数,符号位为 1,127 的二进制表示为 $1111111$,所以 -127 的原码为 $11111111$。
- 反码:
- 在原码的基础上,符号位不变,其余位取反,得到反码为 $10000000$。
- 补码:
- 在反码的基础上加 1,即 $10000000 + 1 = 10000001$。
(2)求 -1 的原码、反码、补码
- 原码:
- 因为 -1 是负数,符号位为 1,1 的二进制表示为 $1$,所以 -1 的原码为 $10000001$。
- 反码:
- 在原码的基础上,符号位不变,其余位取反,得到反码为 $11111110$。
- 补码:
- 在反码的基础上加 1,即 $11111110 + 1 = 11111111$。
补码相加运算
将 -127 的补码 $10000001$ 和 -1 的补码 $11111111$ 相加:
$\begin{align*}&10000001\\+&11111111\\=&110000000\end{align*}$
由于是 8 位二进制运算,需要丢弃最高位的进位 1,结果为 $10000000$。
溢出判断
在 8 位二进制补码表示中,能表示的范围是 -128 到 +127。$10000000$ 对应的十进制数是 -128,在这个表示范围内,所以未发生溢出。