如何使用指数声明定义

时间:2013-09-24 10:18:10

标签: c++ ios c-preprocessor pow exponential

我正在尝试创建以下定义,我的源代码在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是一个运行时函数)。

任何想法,小费都非常感激。

1 个答案:

答案 0 :(得分:4)

  1. 不要将#define用于C ++中的常量,使用const个变量。

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

  3. 所以在你的情况下,正确的表达式是:

    ((1 << ASSIGN_MIN_VAL_NB_BITS) - 1) << ASSIGN_MIN_VAL_BIT_POS