什么是在C 中存储结果INT*的最佳数据类型



是什么是分配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;

最新更新