gpt4 book ai didi

c - int64_t 的宽度,它总是 64 位吗?

转载 作者:行者123 更新时间:2023-12-02 05:51:00 24 4
gpt4 key购买 nike

对于下面的代码

static inline float fix2float(int64_t f)
{
return (float)f / (1 << 60); // <-- error here
}

编译器给我这些警告。

warning: left shift count >= width of type
warning: division by zero

为什么编译器在 64 > 60 时发出这些警告?

最佳答案

1在您的 C 实现中不是 64 位数字。这是一个int ,这可能是 32 位。

编译器不会查看表达式并查看是否存在 int64_t。涉及,因此其他算法应使用 64 位。它从他们的部分建立表达。在 (1 << 60) 部分, 编译器识别一个并给它一个类型 int ,因为这就是 C 规则对简单常量值所做的处理(对于十六进制表示法、后缀和大值还有其他规则)。所以,1 << 60试图转移 int 60 位。自 int在你的系统上只有 32 位,编译器会警告你。

更好的写法是 return f * 0x1p-60f; . 0x1p-60ffloat值为 2–60 的常量。

关于c - int64_t 的宽度,它总是 64 位吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085107/

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