Побитовые операторы
AND, OR, XOR, NOT
«Побитовые операторы» — бесплатный урок C Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 4 уроков всего.
Работа на уровне битов
Целые числа хранятся как последовательности битов. C позволяет напрямую работать с этими битами с помощью побитовых операторов.
Четыре основных оператора: AND &, OR |, XOR ^ и NOT ~.
#include <stdio.h>
int main(void) {
unsigned a = 12;
unsigned b = 10;
printf("a & b = %u\n", a & b);
return 0;
}Побитовый AND
Оператор & устанавливает результирующий бит в 1 только тогда, когда оба входных бита равны 1.
Для 12 (1100) и 10 (1010) результат равен 8 (1000).
#include <stdio.h>
int main(void) {
unsigned a = 12, b = 10;
printf("%u & %u = %u\n", a, b, a & b);
return 0;
}Побитовый OR
Оператор | устанавливает результирующий бит в 1, когда 1 равен хотя бы один входной бит.
12 (1100) OR 10 (1010) равно 14 (1110).
#include <stdio.h>
int main(void) {
unsigned a = 12, b = 10;
printf("%u | %u = %u\n", a, b, a | b);
return 0;
}Побитовый XOR
Оператор ^ (исключающее OR) устанавливает результирующий бит в 1, когда входные биты различаются.
12 (1100) XOR 10 (1010) равно 6 (0110).
#include <stdio.h>
int main(void) {
unsigned a = 12, b = 10;
printf("%u ^ %u = %u\n", a, b, a ^ b);
return 0;
}Побитовый NOT
Оператор ~ инвертирует каждый бит. Для беззнаковых значений ~0 состоит из одних единиц и равно максимальному значению.
#include <stdio.h>
int main(void) {
unsigned char x = 0;
printf("~0 as 8-bit = %u\n", (unsigned char)~x);
return 0;
}Вывод битов
Вспомогательная функция, выводящая двоичное представление байта, упрощает понимание результатов побитовых операций. Мы проверяем каждый бит от старшего к младшему.
#include <stdio.h>
void print_bits(unsigned char v) {
for (int i = 7; i >= 0; i--) {
putchar((v >> i) & 1 ? '1' : '0');
}
putchar('\n');
}
int main(void) {
print_bits(12);
print_bits(10);
return 0;
}Обмен с помощью XOR
У XOR есть интересное свойство: с его помощью можно поменять местами два целых числа без временной переменной.
Примените XOR три раза, чтобы обменять значения.
#include <stdio.h>
int main(void) {
int a = 5, b = 9;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d b=%d\n", a, b);
return 0;
}XOR с самим собой
Результат операции XOR любого значения с самим собой равен 0, а XOR любого значения с 0 не изменяет это значение.
На этих свойствах основан обмен с помощью XOR и многие другие приёмы.
#include <stdio.h>
int main(void) {
int x = 42;
printf("x ^ x = %d\n", x ^ x);
printf("x ^ 0 = %d\n", x ^ 0);
return 0;
}Побитовые и логические операции
Не путайте & с &&, а | с ||.
- Побитовые операторы работают с каждым битом операндов.
- Логические операторы вычисляют истинность и возвращают 0 или 1.
#include <stdio.h>
int main(void) {
printf("2 & 1 = %d\n", 2 & 1);
printf("2 && 1 = %d\n", 2 && 1);
return 0;
}Объединение операторов
Побитовые операторы можно объединять для выражения сложных условий. Здесь мы оставляем биты, установленные в a, но не в b.
#include <stdio.h>
int main(void) {
unsigned a = 0b1111;
unsigned b = 0b0101;
unsigned only_a = a & ~b;
printf("only_a = %u\n", only_a);
return 0;
}Проверка чётности с помощью XOR
Применение XOR ко всем битам позволяет определить чётность — является ли количество установленных битов нечётным. Последовательно сворачивайте значение.
#include <stdio.h>
int main(void) {
unsigned v = 0b1011;
int parity = 0;
while (v) {
parity ^= (v & 1);
v >>= 1;
}
printf("parity = %d\n", parity);
return 0;
}Быстрая проверка
Проверьте свои знания побитовых операторов.
Итоги
Вы изучили побитовые операторы:
&AND оставляет биты, установленные в обоих операндах.|OR оставляет биты, установленные хотя бы в одном операнде.^XOR оставляет различающиеся биты.~NOT инвертирует все биты.- Побитовые операторы отличаются от логических
&&и||.
Часто задаваемые вопросы
Урок «Побитовые операторы» бесплатный?
Да — полный текст урока «Побитовые операторы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 4 уроков всего.
Чему я научусь в уроке «Побитовые операторы»?
AND, OR, XOR, NOT Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C Academy?
Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Побитовые операторы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C Academy?
Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Побитовые операторы
- Сдвиги
- Битовые маски и флаги
- Практические приёмы работы с битами