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

标签 c

这是代码:

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 intunsigned 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/

相关文章:

c - 汇编代码泛化

c - 这种 union 的使用是否严格符合要求?

不能接受几个单词的字符串。fgets、getline 等不工作

c - mqueue接收到错误的数据

c - 在C中将字符串拆分为一定大小的字符串

c - 比较指针与静态变量的行为是什么?

我们可以在模板源文件中使用 CMake foreach 吗?

c - 使用 while 循环输入时出现问题

C套接字编程: select() is returning 0 despite messages sent from server

C typedef 名称冲突