我正在尝试创建以下定义,我的源代码在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是一个运行时函数)。
任何想法,小费都非常感激。
答案 0 :(得分:4)
不要将#define
用于C ++中的常量,使用const
个变量。
^
是按位异或,而不是取幂。 2 to the power of x
可以表示为1 << x
。
所以在你的情况下,正确的表达式是:
((1 << ASSIGN_MIN_VAL_NB_BITS) - 1) << ASSIGN_MIN_VAL_BIT_POS