Работа с битами и битовыми масками в C
НАВИГАЦИЯ ПО СТРАНИЦЕ
Работа с битами и битовыми масками в языке C позволяет выполнять различные операции с индивидуальными битами данных, а также управлять их состоянием. Вот несколько примеров, как это можно сделать:
Установка бита (установка в 1):
unsigned int setBit(unsigned int n, int pos) {
return n | (1 << pos);
}
Пример:
int number = 5; // Бинарное представление: 00000101
number = setBit(number, 3); // Устанавливаем четвёртый бит (считая с нуля)
// Теперь number равно 13, бинарное представление: 00001101
Сброс бита (установка в 0):
unsigned int clearBit(unsigned int n, int pos) {
return n & ~(1 << pos);
}
Пример:
int number = 13; // Бинарное представление: 00001101
number = clearBit(number, 2); // Сбрасываем третий бит
// Теперь number равно 9, бинарное представление: 00001001
Переключение бита (из 0 в 1 и наоборот):
unsigned int toggleBit(unsigned int n, int pos) {
return n ^ (1 << pos);
}
Пример:
int number = 9; // Бинарное представление: 00001001
number = toggleBit(number, 0); // Переключаем нулевой бит
// Теперь number равно 8, бинарное представление: 00001000
Получение значения бита :
int getBit(unsigned int n, int pos) {
return (n >> pos) & 1;
}
Пример:
int number = 13; // Бинарное представление: 00001101
int bit = getBit(number, 2); // Получаем значение третьего бита
// Значение bit теперь равно 1, так как третий бит установлен в 1
Маскирование битов :
Использование битовых масок позволяет извлекать или устанавливать группы битов. Например, чтобы извлечь первые 4 бита из числа:
int mask = 0xF; // Бинарное представление: 00001111
int result = number & mask;
Сдвиг битов :
Сдвиг битов влево и вправо позволяет изменять значения чисел, умножая или деля на 2. Например, сдвиг влево на 1 эквивалентен умножению на 2, а сдвиг вправо на 1 - делению на 2.
int number = 8; // Бинарное представление: 00001000
number = number << 1; // Сдвигаем биты влево на 1
// Теперь number равно 16, бинарное представление: 00010000
Это лишь несколько примеров работы с битами и битовыми масками в языке C. Эти операции часто используются при работе с железом (например, управление портами ввода-вывода), а также при решении задач, связанных с битовыми флагами и масками.