此问题已在此处有答案:
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);
}
此问题已在此处有答案:
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);
}
1条答案
按热度按时间a5g8bdjr1#
如果i的值为-1
这是一个错误的前提。
i
不是-1
。将0u
(或unsigned(0)
)添加到-1
会导致unsigned
。您可能会看到-1
作为i
的输出,因为printf
未定义使用错误的格式说明符。这个
不依赖于猜测
i
的类型并打印:unsigned(-1)
是可表示为unsigned
的最大无符号整数。