关于c语言中常量范围的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 23:26:48
情况如下:
当#include<stdio.h>
void main()
{unsigned long x;
int y;
if(x<100000) y=3;
else y=4;
printf("y=%d",y);}
这时正确。
但把if(x<100000)改成if(1<x<100000)时(注:1这里取小于100000任意正整型都无所谓),这时程序出现一个警告“constant out of range in comparison in function main”。自己试了下,只有把100000调整到int的范围内才能pass。请问各位大虾这是为什么?

#include<stdio.h>
void main()
{unsigned long x;
scanf("%ul",&x);
int y;
if(x>1&&x<100000) y=3;
else y=4;
printf("y=%d\n",y);}

这样,就可以了。
注意:
1<x<100000的意思是:
先比较1和x,如果1<x,则为true;如果x>1,则为false。
再将值true或false与100000相比较。
有的编译器会提示类型转化。
注意正确的用法是:x>1&&x<100000
相当于(x>1)&&(x<100000)
&& 逻辑与 汉语中“并且”的意思

x 未赋初值
还有C中判断语句是不能这样用的if(1<x<100000)
为:if(x>1&&x<100000)

因为1<x<100000先运算1<x返回整形的1或0,再将其与100000比较,当然超出范围了

if((1<x)&&(x<100000))