问题
单项选择题
有以下程序:
#include <stdio. h>
main( )
unsigned int a;
int b=-1;
a=b;
printf(" % u", a);程序运行后的输出结果是()
A. -1
B.65535
C. 32767
D. -32768
答案
参考答案:B
解析:
不同类型的对象进行混合运算时,需要进行数据的类型转换,其转换方向为int→ unsigned→long→double。本题程序中的变量b为int型,需要转换为unsigned型。int型变量的数值范围为-32768~32767,最高位为符号位,而unsigned所表示的数的范围为0~65535,它的最高位为数值位。由于内存中是以补码形式存储数据的,所以整型数-1在内存中表示为16个1,最高位的1表示符号为负,将它转换为unsigned类型,即将原符号位的1看成数值,所以得到 16个数值1,即65535。