智蕴的爸爸出轨:c语言:下列程序执行后的输出结果是-1为什么?

来源:百度文库 编辑:高考问答 时间:2024/05/02 10:27:13
36
下列程序执行后的输出结果是-1为什么?
main() { char x=0xFFFF; printf("%d \n",x--); }

char x=0xFFFF是什么意思
37若有定义: float w; int a,b; 则合法的switch语句是c。为什么?其他3项哪里错了?
a
switch(w)
{ case1.0:printf("*\n");
case2.0;printf("**\n");
}}
b
switch(a)
{ case1.0:printf("*\n");
case2.0;printf("**\n");
c
switch(b)
{ case1:printf("*\n");
default:printf("\n");
case 1+2:printf("**\n");
} }

d
switch(a+b);
{ case 1: printf("*\n");
case 2: rpintf("**\n")
default:printf("\n");

36 输出:-1

x=0xFFFF 如果用十六进制表示的话,数前面要加0x以表示是十六进制。
FFFF用二进制表示就是16个1,1111111111111111,转换成十进制就是2^16-1,即65535。因为INT型数据范围是+32767~-32768,二进制在计算机中表示时,第一位是符号位(这些知识如果学了原码、补码、反码就会了解了),65535超了范围,第一位变成了符号位,1代表负数,所以变成了-1
X--是X先计算,再减一,所以先输出-1,X的值再减一,变成-2.

37
A case后面不能是实型
B a是整形,case后面是实型
D swith()括号里面不能是表达式

-1在计算机中的编码就是0xFFFF;
switch中的case x;
x只能是正整数

计算机中数都是以补码形式存在的,0xFFFF就是-1的补码,另外这次程序是switch结构的,所以x应为正整数,你所说的另外3项是不需要输出的,因为有default阿!!!

对于char型来说0xFFFF就是-1,而x--是现输出后作自减操作,所以输出-1.

对于switch...case结构来讲,
switch (表达式1) 中的表达式1必须返回一个整型;
case 表达式2 中的表达式2也必须是整型;

综上所述只有c是正确的(d case 2少了个分号、printf拼写错误、switch()后面多了个分号)