gpt4 book ai didi

c - c中的广泛乘法支持

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:33 24 4
gpt4 key购买 nike

如果 c 支持宽乘法,我会有些困惑我的意思是这样的

int_32 a = 1000*1000*1000;
int_32 b = 1000*1000*1000;
int_64 c = a*b;

或者也适用于较小的类型

有人说c不支持这个? (它会削减结果,据我了解,它的较低 32 位部分然后将其复制到 int_64,有人说即使 b 是 int_64 它也会做同样的事情我的意思是它会削减结果为 32) - 但我不确定它是否正确,因为它看起来很糟糕

较小的类型呢?

谁能解释一下?

最佳答案

由于ab都是32位整数,乘法将使用32位整数完成,在分配给64位之前会溢出位 c 变量。

另一方面,如果 ab 中至少有一个也是 64 位整数,则非 64 位整数将被转换到 64 位整数,整个乘法将使用 64 位值完成。


对于算术表达式,例如加法,小于int 类型的值将被提升int。如果表达式涉及大于 int 的类型,则所有值都将提升为最大类型。并且整个表达式将使用最大的类型执行。

因此,如果您有一个 short 类型的变量(在现代 32 位和 64 位平台上是 16 位),它与一个 long long (64当前位),然后 short 变量将被提升为 long long,并对表达式求值。


回到你的代码,如果你有

int32_t a = ...;  // 32 bit integer
int64_t b = ...; // 64 bit integer
int64_t c = a * b;

编译器会做等同于

int64_t temp_a = a;  // Promote `a` to a 64 bit integer
c = temp_a * b;

关于c - c中的广泛乘法支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25260255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com