gpt4 book ai didi

c - C语言整数运算的中间结果用什么精度?

转载 作者:行者123 更新时间:2023-12-02 07:23:59 24 4
gpt4 key购买 nike

假设我有以下变量和以下等式:

int16_t a,b,c,d;
int32_t result;

result = a*b - c*d;

ab 和cd 的中间结果将存储在 16 位还是 32 位?

PS:我可以比写问题更快地测试它,我想知道 C 规范说了什么。

最佳答案

中间结果的类型为int

任何比 int 窄的类型,将首先被提升。这些整数提升intunsigned ** 类型。因此,数学必须出现在intunsigned 或原始类型中。

int16_t 肯定更窄或与 int 相同。

result的类型与中间结果的类型无关

int16_t a,b,c,d;
int32_t result = a*b - c*d;

为了让所有平台都可移植,包括 intint32_t 更窄的平台,请确保乘积至少使用 32 位数学计算。

#include <stdint.h>
int32_t result = INT32_C(1)*a*b - INT32_C(1)*c*d;

当然,结果存储为 32 位,可能对 int 中间结果进行符号扩展。

对于具有 32 位或 64 位 int 的机器,中间结果将适合 int32_t,并且值不会发生变化,无一异常(exception)。结果为 -2147450880 到 2147450880(80008000 到 7FFF8000)。

** 从不 long,甚至在 unicorn 上也不行平台。

关于c - C语言整数运算的中间结果用什么精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36212843/

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