为什么 C++ 中的 `-1 + unsigned(0) > 0`? [重复]

问题描述 投票:0回答:1

以下代码在C++中输出

-1 1

如果

i
被评估为-1,为什么它大于0?

#include <stdio.h>

int main() {
  auto i = -1 + unsigned(0);
  printf("%d %d\n", i, i > 0);
}
c++ c++17 clang unsigned unsigned-integer
1个回答
1
投票

如果我被评估为-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
的最大无符号整数。

© www.soinside.com 2019 - 2024. All rights reserved.