第 13 题
已知 C 程序中,某类型为 int 的变量 x 的值为 -1088。程序执行时,x 先被存放在 16 位寄存器 R1 中,然后被进行算术右移 4 位的操作。则此时 R1 中的内容(以十六进制表示)是( )。
A. FBCOH B. FFBCH C. 0FBCH D. 87BCH
[tag_link]
正确答案:B
首先,变量 x 的值为 -1088,在 16 位寄存器中采用二进制补码表示。 1088 的十六进制表示为 0x0440,对其取反加一得到 -1088 的表示:0xFFFF - 0x0440 + 1 = 0xFBBF + 1 = 0xFBC0。 因此,寄存器 R1 初始内容为 0xFBC0。
执行算术右移 4 位时,由于符号位为 1,左移空出的高位补 4 个 1。 原始值 0xFBC0(二进制 1111 1011 1100 0000)右移 4 位后,低 4 位丢弃,高 4 位补 1,得到 1111 1111 1011 1100,即十六进制 0xFFBC。
另一种验证方式:算术右移 4 位等价于除以 16。 计算 -1088 / 16 = -68,而 -68 的 16 位二进制补码表示为 0xFFBC(68 为 0x0044,取反加一得 0xFFBC)。 因此,移位后 R1 的内容为 0xFFBC。
选项 A 为原始值,选项 C 和 D 均为正数表示,与结果不符,故正确答案为 B。