在进行无符号算术运算时,我发现了一个奇怪的现象。由于循环溢出,预计b
和-a
具有相同的数字4294967286
,但实际输出结果为-10
和4294967286
。请问有谁能给个提示?
#include <iostream>
int main() {
unsigned int a = 10;
int b = -a;
std::cout << b << ", " << -a << std::endl;
}
在进行无符号算术运算时,我发现了一个奇怪的现象。由于循环溢出,预计b
和-a
具有相同的数字4294967286
,但实际输出结果为-10
和4294967286
。请问有谁能给个提示?
#include <iostream>
int main() {
unsigned int a = 10;
int b = -a;
std::cout << b << ", " << -a << std::endl;
}
-a
会使用unsigned
算术运算进行求值,并且将是一个比std::numeric_limits<int>::max()
更大的数字。 当一元运算符-
应用于unsigned
类型时,它的行为更像是一个模数运算符。
因此,由于对int
进行了超出范围的赋值,您的程序的行为是实现定义的。
int
变量的值是 4294967286,这个值比int
的最大值还要大呢? - molbdniloint b = -a;
->unsigned int b = -a;
- Paul Rb
也会溢出。 - Zhe Chen