Я пытаюсь создать следующие определения, мой исходный код распределяется между приложением 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 — это функция времени выполнения).
Любая идея, чаевые очень ценятся.
Не использовать #define
для констант в C ++ используйте const
переменные.
^
побитовый XOR, не возведение в степень. 2 to the power of x
может быть представлен как 1 << x
,
Так что в вашем случае правильное выражение будет:
((1 << ASSIGN_MIN_VAL_NB_BITS) - 1) << ASSIGN_MIN_VAL_BIT_POS
Других решений пока нет …