2013-09-24 2 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