gpt4 book ai didi

c - 编译时数字的位位置

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:02 29 4
gpt4 key购买 nike

我正在使用 C 在嵌入式系统上实现定点数学。

为了便于阅读,我将分母表示为 2 的幂:

#define Fixed_Point_Base 4096U

但是,当我与定点数学相互转换时,我需要偏移量:

#define Fixed_Point_Bit_Position 12U

为了使维护更容易和代码更健壮,我想根据 Fixed_Point_Base 数为位位置(移位数)设置一个#define:

#define Fixed_Point_Bit_Position(x) {/*...*/}

我知道的唯一方法涉及对数和除法,我真的不想在嵌入式系统中使用对数或除法:

bit count = ln(4096) / ln(2)

我正在寻找返回 2 的幂位位置的预处理器宏或编译时解决方案。

我的网络搜索返回了代码示例,但不是编译时/预处理器解决方案。

仅供引用,我正在使用带 ARM7TDMI 处理器的 IAR 嵌入式工作台。
编辑 1: 我将 MISRA C 2004 指南与 Parasoft 静态分析和 Coverity 静态分析工具结合使用。答案必须通过这些约束。

最佳答案

你的问题与我的一个老问题高度相关:

Is there any way to compute the width of an integer type at compile-time?

已接受的答案解决了您的问题:

https://stackoverflow.com/a/4589384/379897

特别是,使用:

#define Fixed_Point_Bit_Position(x) IMAX_BITS((x)-1)

其中 IMAX_BITS 是该答案中的宏之一。

关于c - 编译时数字的位位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22075058/

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