C ++错误导致两个无符号long long整数相乘

C++ wrong result in multiplication of two unsigned long long integers

考虑以下 unsigned long long 个整数的乘法:

unsigned long long a=4294967297;
unsigned long long b=4294967297;
cout<<a*b<<endl;

8589934593

我没想到这个答案。相反,我期待得到:

18446744065119617025

请注意,根据this sourceunsigned long long 可以表示的最大整数是18446744073709551615(或十六进制0xffffffffffffffff)。这比我预期的 184467440651196170258589934590,所以我假设这个数字仍然可以表示。

这是怎么回事,如何解决这个问题?

编辑:

你们是对的,我在玩不同的数字,混淆了 42949672974294967295 的平方结果。最后 7 它会溢出。感谢您指出这一点。

我认为你的数学计算有误:

slowpy3.8> 4294967297 * 4294967297
18446744082299486209
slowpy3.8> hex(_)
'0x10000000200000001'
slowpy3.8> 0xffffffffffffffff > 0x10000000200000001
False
slowpy3.8> math.log2(18446744082299486209)
64.0000000006718
slowpy3.8>