Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

unsigned char c = (x & 0xFF);

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

Ответ 3

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

Итак, для младших 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 */

Ответ 4

Вы можете проверить, установлен ли конкретный бит в числе, используя < < и &, т.е.:

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

будет проверять, установлен ли четвертый бит или нет.

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