在执行无符号算术时,我刚刚观察到一个奇怪的现象。预计b
和-a
的数字4294967286
相同,但b
和-a
的实际输出为-10
,并且4294967286
。有人可以帮忙提示吗?
#include <iostream>
int main() {
unsigned int a = 10;
int b = -a;
std::cout << b << ", " << -a << std::endl;
}
答案 0 :(得分:17)
-a
以unsigned
算术求值,并且比std::numeric_limits<int>::max()
大 个数字。一元运算符-
应用于unsigned
类型时,其作用类似于模运算符。
由于对int
的分配超出范围,因此程序的行为是实现的定义。