第 13 题
设机器数字长 16 位,有一个 C 语言程序段如下:
A. 50DBH B. BD05H C. A1B6H D. D0DBH
[tag_link]
正确答案:A
首先,程序中的 `int n = 0xAlB6;` 可能存在笔误,十六进制数字应为 0-9 和 A-F,因此合理推测为 `0xA1B6`。 机器数字长 16 位,因此 `int` 和 `unsigned int` 均为 16 位。
`n` 的初始值为 `0xA1B6`,二进制表示为 `1010 0001 1011 0110`。 作为有符号整数,其最高位为 1,表示负数,但赋值给无符号整数 `m` 时,位模式保持不变,`m` 的初始值同样为 `0xA1B6`(无符号解释为 41398)。
执行 `m = m >> 1;` 时,由于 `m` 是无符号整数,右移操作为逻辑右移,高位补 0。 原始二进制 `1010 0001 1011 0110` 右移一位后变为 `0101 0000 1101 1011`,转换为十六进制为 `0x50DB`。
机器采用大端方式存储,即高位字节在低地址,低位字节在高地址,但内存中的字节顺序不影响值的十六进制表示。 因此,`m` 在内存中的结构对应十六进制值 `50DBH`,与选项 A 一致。