比较有符号和无符号变量时出现意外的程序输出

Rad*_*row 0 c

这是代码:

unsigned int c;
signed int d = -1;
c = d;
if(c == d) 
    printf("c == d\n");
Run Code Online (Sandbox Code Playgroud)

运行它会得到输出:c == d.

变量c不能为负吗?

AnT*_*AnT 7

根据通常的算术转换规则,表达式c == d被解释为c == (unsigned int) d.更具体地说,当在相等比较运算符中混合signed intunsigned int操作数时,操作数在比较之前signed int被隐式转换为unsigned int类型.C中的大多数二元运算符也是如此.

同时,您指定了值cas c = d,相当于c = (unsigned int) d.

所以,你可以立即看到,你是同样的事情比较同样的事情:你基本上是比较(unsigned int) d(unsigned int) d.难怪平等成立.