为什么输出错了?

Nit*_*esh 1 c types

#include<stdio.h>

main()
{
      unsigned  x=1;
      signed char y=-1;
      clrscr();
      if(x>y)
       printf("x>y");
      else
     printf("x<=y");
}
Run Code Online (Sandbox Code Playgroud)

有符号字符的值从-128增加到127.所以预期的输出应该是'x> y',但事实并非如此.编译器给出输出 - "x <= y".你能解释一下原因吗?

cni*_*tar 7

在比较中,signed char转换为a unsigned int,因此看起来像一个非常大的值.我希望编译器能够警告你 - 即"比较有符号和无符号的东西"中的某些内容令人困惑.

此转换是在"关系运算符"下强制执行的:

如果两个操作数都具有算术类型,则执行通常的算术转换.