如果我尝试在c ++中将大于pow(2,64)-1的值分配给unsigned long long,该怎么办?

AJ9*_*J95 4 c++ variables types range

如果我有两个无符号长long值表示pow(10,18)和pow(10,19)并且我将它们相乘并将输出存储在另一个unsigned long long类型的变量中......我们得到的值显然不是回答,但它有任何逻辑吗?每次我们尝试使用任意大数字时,我们会得到一个垃圾类型的值,但是输出是否具有输入值的任何逻辑?

Ker*_* SB 10

C++中的无符号整数类型遵循模运算的规则,即它们表示模2 N的整数,其中N是整数类型的值位数(可能小于其sizeof时间CHAR_BIT); 具体而言,该类型保存值[0,2 N).

所以,当你两个数相乘,结果是数学计算结果除以2的余ñ.

数字N可通过编程方式获得std::numeric_limits<T>::digits.