我编写了以下代码,但问题是它没有显示所需的输出。
#include<stdio.h>
int main()
{
unsigned x=1;
signed char y=-1;
if(x>y)
printf("x>y\n");
else
printf("x<=y\n");
return 0;
}
上述程序应该输出x> y,因为第一个条件应该为1,因为1大于-1但它给出输出x <= y。 为什么if条件不正确?
答案 0 :(得分:2)
由于从signed char到unsigned int的类型转换,程序提供了错误的输出。 尽量避免使用char到int隐式类型转换。
答案 1 :(得分:1)
unsigned x=1;
== unsigned int x=1;
。
和x = 0x00000001;
y = 0xff
在x
和y
之间进行比较时,会type conversion
,因为两者的类型不同。
y
将首先转换为int
,其值为0xffffffff
,但两者的类型仍然不同,因此y
的类型将转换为unsigned int
},值为0xffffffff
。
现在,两个unsigned int
之间的比较和值为:x = 0x00000001
,y = 0xffffffff
。现在,您应该了解原因。