这是代码:
unsigned int c;
signed int d = -1;
c = d;
if(c == d)
printf("c == d\n");
运行它会得到输出:c == d。
c
变量不能为负对吗?
最佳答案
根据通常的算术转换规则,表达式c == d
被解释为c == (unsigned int) d
。更具体地说,当您在相等比较运算符中混合使用 signed int
和 unsigned int
操作数时,signed int
操作数将隐式转换为 unsigned比较前的 int
类型。 C 中的大多数二元运算符也是如此。
同时,你将c
的值赋值为c = d
,相当于c = (unsigned int) d
.
因此,您可以立即看到,您是在将同一事物与同一事物进行比较:您实际上是在将 (unsigned int) d
与 (unsigned int) d
。难怪等式成立。
关于c - 比较有符号和无符号变量时意外的程序输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256470/