C 语言代码如下:
int i = 32777;
short si =i;
int j=si;
执行上述代码段后, j 的值为( )。
A. -32777 B. -32759 C. 32759 D. 32777
执行上述 C 语言代码段后,j 的...
用户登录可进行刷题及查看答案
执行上述 C 语言代码段后,j 的值为 B. -32759。
解析:
变量初始化:int i = 32777
int i = 32777
int通常为 32 位,范围是 -2,147,483,648 到 2,147,483,647。
int
32777在int范围内,二进制表示为 0000 0000 0000 0000 1000 0000 0000 1001(假设 32 位)。
32777
0000 0000 0000 0000 1000 0000 0000 1001
赋值给short si:short si = i
short si
short si = i
short通常为 16 位,范围是 -32,768 到 32,767。
short
32777超出short范围,发生截断:
只保留低 16 位:1000 0000 0000 1001。
1000 0000 0000 1001
最高位(第 16 位)为1,表示负数(补码形式)。
1
补码转换为原码:1000 0000 0000 1001 → 减 1 得1000 0000 0000 1000 → 取反得0111 1111 1111 0111(即十进制32760 + 7 = 32767),因此si的值为 -32761。
1000 0000 0000 1000
0111 1111 1111 0111
32760 + 7 = 32767
si
赋值回int j:int j = si
int j
int j = si
short扩展为int时,符号位扩展:
short si的 16 位值为1000 0000 0000 1001。
扩展为 32 位时,高 16 位补1,得到1111 1111 1111 1111 1000 0000 0000 1001。
1111 1111 1111 1111 1000 0000 0000 1001
该补码对应的十进制值为 -32759(计算方式:-2^15 + 9 = -32768 + 9 = -32759)。
-2^15 + 9 = -32768 + 9 = -32759
结论:
最终j的值为 -32759,对应选项 B。
j
登录后提交答案
暂无评论,来抢沙发