考虑以下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
大,所以我假设这个数字仍然可以表示。
发生了什么?如何解决这个问题?
编辑:
你们是对的,我在玩不同的数字,混淆了4294967297
和4294967295
的平方的结果。当7
在末尾时,它会溢出。谢谢你指出这一点。
我想你算错了:
slowpy3.8> 4294967297 * 4294967297
18446744082299486209
slowpy3.8> hex(_)
'0x10000000200000001'
slowpy3.8> 0xffffffffffffffff > 0x10000000200000001
False
slowpy3.8> math.log2(18446744082299486209)
64.0000000006718
slowpy3.8>