1

我正在尝试创建以下定义,我的源代码在 iOS 应用程序和 C++ ARM 固件之间共享。

#define ASSIGN_MIN_VAL_NB_BITS      7
#define ASSIGN_MIN_VAL_BIT_POS      1
#define ASSIGN_MIN_VAL_BIT_MASK     (((2^ASSIGN_MIN_VAL_NB_BITS)-1)<<ASSIGN_MIN_VAL_BIT_POS)

我期望 ASSIGN_MIN_VAL_BIT_MASK 为 0b11111110,但事实并非如此。上面的 2^ 似乎是问题所在。我怎么能声明类似的东西?我尝试使用 pow(x,y) 替换 2^,它可以工作,但我想找到一种方法来声明这些定义而不使用运行时函数(我假设 pow 是运行时函数)。

任何想法,小费不胜感激。

4

1 回答 1

4
  1. 不要#define在 C++ 中使用常量,使用const变量。

  2. ^是按位异或,而不是取幂。2 to the power of x可以表示为1 << x

因此,在您的情况下,正确的表达式是:

((1 << ASSIGN_MIN_VAL_NB_BITS) - 1) << ASSIGN_MIN_VAL_BIT_POS
于 2013-09-24T10:22:15.963 回答