2013-09-24 71 views
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. 不要使用#define在C++常量,使用const變量。

  2. ^是按位XOR,而不是冪運算。 2 to the power of x可以表示爲1 << x

所以你的情況,正確的表達應該是:

((1 << ASSIGN_MIN_VAL_NB_BITS) - 1) << ASSIGN_MIN_VAL_BIT_POS 
+0

完美的作品,謝謝! – Jerome