Как объявить определения с экспоненциальным

Я пытаюсь создать следующие определения, мой исходный код распределяется между приложением 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

Решение

  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
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector