第 12 题
在32 位计算机上执行下列 C 语言代码:
short si =-32767;
unsigned int ui = si; 变量 ui 的值为()。
A.2¹⁵-1
B.2¹⁵+1
C.2³²-21⁵-1
D.2³²-215+1
[tag_link]
正确答案:D
本题考察 无符号数 和 有符号数 的补码表示。16 位的 short 类型的 -32767 的二进制表示为 1000 0000 0000 0001,将其转化为 32 位的 unsigned 时,需要在最高位扩展 16 位。由于 -32767 (short) 的最高位为 1,所以扩展的高位全部为 1。由此得到 32 位的 unsigned 的二进制是 1111 1111 1111 1111 1000 0000 0000 0001,其值为 1 + 2 15 + 2 16 + ⋯ + 2 31 = 2 32 − 2 15 + 1 。