以下代码在C++中输出
-1 1
。
如果
i
被评估为-1,为什么它大于0?
#include <stdio.h>
int main() {
auto i = -1 + unsigned(0);
printf("%d %d\n", i, i > 0);
}
如果我被评估为-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
的最大无符号整数。