#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".你能解释一下原因吗?
在比较中,signed char
转换为a unsigned int
,因此看起来像一个非常大的值.我希望编译器能够警告你 - 即"比较有符号和无符号的东西"中的某些内容令人困惑.
此转换是在"关系运算符"下强制执行的:
如果两个操作数都具有算术类型,则执行通常的算术转换.