C++中为什么`-1 + unsigned(0)>0`?

fhity93d  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(144)

此问题已在此处有答案

Signed to unsigned conversion in C - is it always safe?(8个回答)
2天前关闭。
下面的代码在C++中输出-1 1
如果i被计算为-1,为什么它大于0?

#include <stdio.h>

int main() {
  auto i = -1 + unsigned(0);
  printf("%d %d\n", i, i > 0);
}
a5g8bdjr

a5g8bdjr1#

如果i的值为-1
这是一个错误的前提。
i不是-1。将0u(或unsigned(0))添加到-1会导致unsigned。您可能会看到-1作为i的输出,因为printf未定义使用错误的格式说明符。
这个

#include <iostream>

int main() {
  auto i = -1 + unsigned(0);
  std::cout << i << " " << (i>0);
}

不依赖于猜测i的类型并打印:

4294967295 1

unsigned(-1)是可表示为unsigned的最大无符号整数。

相关问题