c++错误导致两个unsigned long long整数相乘



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

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

8589934593

我没有预料到这个答案。相反,我希望得到:

18446744065119617025

注意,根据这个来源,unsigned long long可以表示的最大整数是18446744073709551615(或者十六进制的0xffffffffffffffff)。这是8589934590比我预期的18446744065119617025大,所以我假设这个数字仍然可以表示。

发生了什么?如何解决这个问题?

编辑:

你们是对的,我在玩不同的数字,混淆了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> 

相关内容

最新更新