是什么是分配int*无签名长
结果的最佳可配置数据类型例如:
int RValue1 = 4096;
unsigned long RValue2 = 1048576;
我想将rvalue2*rvalue1的结果存储在变量中。
我尝试了以下内容:
int RValue1 = 4096;
unsigned long RValue2 = 1048576;
long long result1 = RValue2*RValue1; //resulted 0
int64_t result2 = RValue2*RValue1;// resulted 0
预先感谢
int64很好。您获得0,因为您的代码首先计算32位产品(即0(,然后将其存储在INT64变量中。尝试这样的方式:
int64_t result3 = (int64_t)(RValue2)*RValue1;
int RValue1 = 4096; // 0x1000
unsigned long RValue2 = 1048576; // 0x10`0000
long long result1 = RValue2*RValue1;// 0x1`0000`0000
使用上述乘法,即使结果存储在 long long
中,也可以使用unsigned long
数学数学完成。结果溢出的unsigned long
32位数学,因此将其"包裹"到0。如果unsigned long
是64位,则不会注意到任何问题。
使用混合整数类型,我建议不要铸造,因为它有时可以缩小计算中使用的类型,乘以目标类型的1次以确保计算以为作为目标的类型。
long long result1 = 1LL*RValue2*RValue1;