Как мне получить младшие 8 битов int? - PullRequest
22 голосов
/ 17 июля 2010

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

Ответы [ 4 ]

35 голосов
/ 17 июля 2010
unsigned n = 8;
unsigned low8bits = n & 0xFF;

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

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

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

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

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

15 голосов
/ 17 июля 2010

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

unsigned char c = (x & 0xFF);

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

8 голосов
/ 17 июля 2010

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

Итак, для младших 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 */
2 голосов
/ 17 июля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...