(12 分)已知 32 位寄存器中存放的变量 x 的机器码为 C000004H,请问:
(1)当 x 是无符号整数时:
(2)当 x 是带符号整数(补码)时:
(3)当 x 是 float 型浮点数时:
[tag_link]
**【解析】** (1) `x` 是无符号整数,所有的二进制位均为数值位,`C000 0004H` 的真值为 。 `x/2` 是由逻辑右移一位得到的,即 ,其真值为 ,存放在 `R1` 中的机器码是 `6000 0002H`。 `2x` 是由 `x` 逻辑左移一位得到的,真值发生溢出,存放在 `R1` 中的机器码是 `8000 0008H`。
(2) 机器码 `C000 0004H = 1100 0000 0000 0000 0000 0000 0000 0100B`,表示这是一个负数,数值位取反末位加 1,得到的二进制原码为 `1011 1111 1111 1111 1111 1111 1111 1100`,即二进制真值为 `-0011 1111 1111 1111 1111 1111 1111 1100`,对应的十进制真值为 。 `x/2` 是由 `x` 算术右移一位得到的,其真值为 ,存放在 `R1` 中的机器码是 `E000 0002H`。 `2x` 是由 `x` 算术左移一位得到的,其真值为 ,存放在 `R1` 中的机器码是 `8000 0008H`。
(3) 在 IEEE754 单精度浮点数中,最高位为数符位;其后是 8 位阶码,以 2 为底,用移码表示,阶码的偏置值为 127;其后 23 位是尾数数值位,隐藏数值的最高位 “1”。 转换为二进制 `1 100 0000 0 000 0000 0000 0000 0000 0100`,可知,`x` 为负数,阶码为 1,尾数为 ,故真值为 。 `x/2` 的真值是 ,存放在 `R1` 中的机器码为 `1 011 1111 1 000 0000 0000 0000 0000 0100`,即 `BF80 0004H`。 `2x` 的真值是 ,存放在 `R1` 中的机器码为 `1 100 0000 1 000 0000 0000 0000 0000 0100`,即 `C080 0004H`。