为什么1> -1似乎是假的?

时间:2014-09-17 01:03:49

标签: c char int

我编写了以下代码,但问题是它没有显示所需的输出。

#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条件不正确?

2 个答案:

答案 0 :(得分:2)

由于从signed char到unsigned int的类型转换,程序提供了错误的输出。 尽量避免使用char到int隐式类型转换。

答案 1 :(得分:1)

unsigned x=1; == unsigned int x=1;

x = 0x00000001; y = 0xff

xy之间进行比较时,会type conversion,因为两者的类型不同。

y将首先转换为int,其值为0xffffffff,但两者的类型仍然不同,因此y的类型将转换为unsigned int },值为0xffffffff

现在,两个unsigned int之间的比较和值为:x = 0x00000001y = 0xffffffff。现在,您应该了解原因。