c语言的问题 请高手给解释一下

作者&投稿:移茅 (若有异议请与网页底部的电邮联系)
main()
{ int a=-1;
int b=32767;
long c=32768;
printf("1:%d,%u,%o,%x\n",a,a,a,a);//输出是-1, 4294967295, 37777777777, ffffffff(vc 6.0 32位系统)这个主要是%u ,%o, %x 都是输出无符号格式格式符。也就是说,他们对应的值是不可以是负数.
以%u为例,在32位系统中,unsigned int 对应的值的范围是0-4294967295,-1让他溢出了
如果是把a赋值为-2的话,输出对应应该就是4294967294,而把a赋值为4294967296的话,输出应该就是0.

printf("2:%d,%d,%ld,%ld\n",b,b,b,b);//我的32位系统输出都是32767.

printf("3:%d,%d,%ld,%ld\n",c,c,c,c);//我的32位系统输出都是32768,如果输出-32768的话,那也是溢出问题.
}

就是对应的a的数值啊,和代码什么的,自己去看下不就知道了~~~~

谁能解释一下这道c语言题目?~

查5&5-3&&4中的运算符号在优先级表可得
先“-”再“&”最后“&&”。
printf("%d
",5&5-3&&4);等价于printf("%d
",(5&(5-3))&&4);
先执行5-3得2,然后5&2得0,最后0&&4得0。
所以本输出结果为0

你好!!!
值为1

逻辑或运算:||是双目运算,是按从左到右的顺序计算:
同时逻辑与和逻辑或都有”短路“现象:(后面解释)

m || (m=2) || (m=3) || (m=4)首先编译器会算m 此时为0,那么就再计算(m=2) 此时为真,那么表达式的值就是1,后面的 (m=3) || (m=4) 就不用算了,因为前面(m=2)已经可以确定表达式的值(为1),这就是短路现象。

同时逻辑与也是满足短路现象的,lz可以看看其他的资料

是的,我运行了,就是1,有些答案是错误的,lz看的时候要注意点!!!