C ++中的无符号算术

时间:2018-11-20 08:10:52

标签: c++

在执行无符号算术时,我刚刚观察到一个奇怪的现象。预计b-a的数字4294967286相同,但b-a的实际输出为-10,并且4294967286。有人可以帮忙提示吗?

#include <iostream>

int main() {
  unsigned int a = 10;
  int b = -a;
  std::cout << b << ", " << -a << std::endl;
}

https://repl.it/repls/ExpertDrabOrganization

1 个答案:

答案 0 :(得分:17)

-aunsigned算术求值,并且比std::numeric_limits<int>::max() 个数字。一元运算符-应用于unsigned类型时,其作用类似于模运算符。

由于对int的分配超出范围,因此程序的行为是实现的定义