【发布时间】:2014-09-17 01:03:49
【问题描述】:
我已经编写了以下代码,但问题是它没有显示所需的输出。
#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,但它给出了输出 x
【问题讨论】:
-
signed char操作数y被转换为unsigned,产生一个很大的正值。 -
如果有符号的字符 y 被转换为无符号的,那么它应该是 y=1,然后是 x==y 但是当我使用条件 if(x>=y) 时,如果条件不成立。跨度>
-
不,将
-1转换为unsigned的结果是UINT_MAX,而不是1。 -
现在,明白了。是的,在转换无符号字符后,它是一个巨大的 10 位数字。这就是 if 条件变为假的原因。谢谢。
-
@LuisColorado
(unsigned)-1不是未定义的行为。从有符号到无符号的转换和赋值是明确定义的。