Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;两个无符号长整数相乘的错误结果_C++_Unsigned Long Long Int - Fatal编程技术网

C++ C++;两个无符号长整数相乘的错误结果

C++ C++;两个无符号长整数相乘的错误结果,c++,unsigned-long-long-int,C++,Unsigned Long Long Int,考虑以下无符号长整数的乘法: unsigned long long a=4294967297; unsigned long long b=4294967297; cout<<a*b<<endl; 无符号长a=4294967297; 无符号长b=4294967297; 我想你的数学算错了: slowpy3.8> 4294967297 * 4294967297 18446744082299486209 slowpy3.8> hex(_) '0x100000002

考虑以下无符号长整数的乘法:

unsigned long long a=4294967297;
unsigned long long b=4294967297;
cout<<a*b<<endl;
无符号长a=4294967297;
无符号长b=4294967297;

我想你的数学算错了:

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

我认为你的数学算错了:

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

a*b=18446744082299486209大于18446744073709551615将类型更改为
constexpr
并添加结果
constexpr unsigned long c=a*b
立即警告该操作会导致算术溢出。
4294967297
2^32+1
因此
4294967297^2>2^64
不适合
无符号长型
。a*b=184467440822994486209大于18446744073709551615将类型更改为
constexpr
,并添加结果
constexpr无符号长c=a*b
立即警告该操作会导致算术溢出。
4294967297
2^32+1
,因此
4294967297^2>2^64
不适合
无符号长字符