Запись на MSB и LSB неподписанного Char

0

У меня есть unsigned char, и я хочу написать 0x06 по четырем наиболее значимым, и я хочу записать 0x04 на его 4 младших значащих бита. Таким образом, представление Char должно быть похоже на 0110 0010

Может ли кто-нибудь направить меня, как я могу это сделать в C?

  • 6
    Просто c = 0x64; ?
Теги:
bit
bit-manipulation

3 ответа

3
Лучший ответ
c = (0x06 << 4) | 0x04;

Потому как:

0x04    = 0000 0100
0x06    = 0000 0110

0x06<<4 = 0110 0000
or op:  = 0110 0100
0

Во-первых, убедитесь, что в unsigned char имеется восемь бит:

#include <limits.h>
#if CHAR_BIT != 8
    #error "This code does not support character sizes other than 8 bits."
#endif

Теперь предположим, что у вас уже есть unsigned char определенный с помощью:

unsigned char x;

Затем, если вы хотите полностью установить unsigned char должен иметь 6 в высоких четырех битах и 4 в младших четырех битах, используйте:

x = 0x64;

Если вы хотите видеть высокие биты для a и младших бит в b, используйте:

// Shift a to high four bits and combine with b.
x = a << 4 | b;

Если вы хотите установить высокие биты в a и оставить низкие биты без изменений, используйте:

// Shift a to high four bits, extract low four bits of x, and combine.
x = a << 4 | x & 0xf;

Если вы хотите установить низкие биты в b и оставить высокие биты без изменений, используйте:

// Extract high four bits of x and combine with b.
x = x & 0xf0 | b;

Вышеизложенное предполагает, что a и b содержат только четырехбитовые значения. Если у них могут быть установлены другие биты, используйте (a & 0xf) и (b & 0xf) вместо a и b выше, соответственно.

0

Переместите значения в правильное положение с помощью операторов побитового сдвига и объедините их с поразрядным или.

unsigned char c = (0x6 << 4) | 0x4;

Чтобы отменить процесс и извлечь битовые поля, вы можете использовать поразрядные и с маской, содержащей только интересующие вас биты:

unsigned char lo4 = c & 0xf;
unsigned char hi4 = c >> 4;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню