下面程序的运行结果是 ( )
#include <stdio.h>
int main()
{
unsigned char i;
unsigned char ucMax = 1000; 这里变量赋值截断,
printf("ucMax = %d\n",ucMax); 输出值为232
int iSum = 0;
for( i = 0;i <= ucMax; i++)
{
iSum = iSum + i;
}
printf("Sum is %d\n",iSum); 233×232÷2=27028
}
A.499500 B. 27028 C. 500500 D. 以上答案都不对。
答案:B
考察点:变量赋值截断。
总结:
1、char类型在默认情况下是有符号型,且总共占用1个字节,即8个比特,其范围在-126~127之间;
2、这里的char类型为无符号型,所以其范围在0~255之间,而1000明显大于255,因此这里发生变量赋值截断;
3、十进制1000的二进制表示为0000 0011 1110 1000;unsigned char类型占用8个比特,取二进制1000的后8位,即1110 1000;且为无符号型,所以128+64+32+8=232;