单选题 考虑下列C语言程序代码:
int i=65535;
short si=short(i);
int j=si;
假定上述程序段在某32位机器上执行,sizeof(int)=4,则变量i、si和j的值分别是______。
  • A.65535、65535、65535
  • B.65535、1、-1
  • C.65535、-1、-1
  • D.65535、-1、1
【正确答案】 C
【答案解析】[解析] 在一台32位机器上执行上述代码段时,i为32位补码表示的定点整数,第2行要求强行将一个32位带符号数截断为16位带符号整数,65535的32位补码表示为0000 FFFFH,截断为16位后变成FFFFH,在16位补码表示中,它表示-1,因此si的值为-1。 再将该16位带符号整数扩展(扩展不能改变数值大小,即j还应该是-1)为32位时,就变成了FFFF FFFFH。因此i的值也为-1。 综上,本题选择C。