0Pricing
C Academy · Урок

Побитовые операторы

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 — локальная установка не требуется.

Все уроки этого курса

  1. Побитовые операторы
  2. Сдвиги
  3. Битовые маски и флаги
  4. Практические приёмы работы с битами
← Назад к C Academy