我只是在做无符号算术时发现了一个奇怪的现象.它的预期,b并且-a具有相同数量4294967286由于环绕,但实际输出b和-a是-10和4294967286分别.任何人都可以帮忙提一下吗?
#include <iostream>
int main() {
unsigned int a = 10;
int b = -a;
std::cout << b << ", " << -a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
Bat*_*eba 17
-a在被评估unsigned的算术,和将是一个数较大的比std::numeric_limits<int>::max().-应用于unsigned类型时,一元运算符更像模数运算符.
因此,你的程序的行为是实现定义因超出范围的分配的int.