Как получить нижние 8 бит int?


Допустим, у меня есть переменная int n = 8. На большинстве машин это будет 32-битное значение. Как я могу получить только нижние 8 бит (младший байт) этого в двоичном формате? Кроме того, как я могу получить доступ к каждому биту, чтобы узнать, что это такое? Мой вопрос связан с C

4 19

4 ответа:

unsigned n = 8;
unsigned low8bits = n & 0xFF;

Обратите внимание на несколько вещей:

  1. для побитовых операций всегда используйте типы unsigned
  2. Биты
  3. могут быть извлечены из чисел с помощью двоичной маскировки с помощью оператора &
  4. для доступа к низким 8 битам маска является 0xFF, потому что в двоичном коде она имеет свои низкие 8 бит, а остальные 0
  5. младшие 8 бит числа 8 являются... 8 (подумайте об этом на мгновение)

Чтобы получить доступ к определенному биту числа, произнесите kth бит:

unsigned n = ...;
unsigned kthbit = (1 << k) & n;

Теперь kthbit будет 0, если k - й битn равен 0, и некоторое положительное число (2**k), Если k - й бит n равен 1.

Используйте побитовую арифметику для маскировки младших 8 бит:

unsigned char c = (x & 0xFF);

Чтобы получить доступ к N-му младшему биту, уравнение равно (x & (1 << n)) (n из нуля указывает на наименее значимый бит). Результат, равный нулю, означает, что бит чист, а ненулевой-что бит установлен.

Лучший способ-использовать битовый логический оператор & с соответствующим значением.

Итак, для нижних 8 бит:

n & 0xFF; /* 0xFF == all the lower 8 bits set */

Или как общее правило:

n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */

Можно объединить с оператором сдвига битов, чтобы получить определенный бит:

(n & (1<<3))>>3; 
  /* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */

Вы можете проверить, установлен ли определенный бит в число с помощью

if (num & (1<<3)) ...

Проверит, установлен ли четвертый бит или нет.

Аналогично, вы можете извлечь только самые низкие 8 бит (как целое число), используя & с числом, которое имеет только самые низкие 8 бит, т. е. num & 255 или num & 0xFF (в шестнадцатеричном виде).