Алгоритмы C/C++

Битовые операции

Bit mask компактно хранит несколько boolean options в unsigned integer.

Что такое Битовые операции?

Bit mask компактно хранит несколько boolean options в unsigned integer.

Устанавливайте, очищайте, переключайте и проверяйте flags.

Важные моменты

  • Проверяйте пустые, одиночные, повторяющиеся и отсортированные данные.
  • Отделяйте корректность от оптимизации.
  • В production предпочитайте стандартную библиотеку.

Примеры кода на C и C++

C
Запустить →
main.c
#include <stdio.h>

int main(void) {
    unsigned flags = 0;
    flags |= 1u << 1;
    flags |= 1u << 3;
    flags ^= 1u << 1;
    printf("flags=%u bit3=%u\n", flags, (flags >> 3) & 1u);
}
Ожидаемый результат
flags=8 bit3=1
C++
Запустить →
main.cpp
#include <bitset>
#include <iostream>

int main() {
    std::bitset<4> flags;
    flags.set(1);
    flags.set(3);
    flags.flip(1);
    std::cout << "flags=" << flags
              << " bit3=" << flags.test(3) << '\n';
}
Ожидаемый результат
flags=1000 bit3=1

Сравнение C и C++

Для предсказуемых shifts используйте unsigned. C работает с масками, C++ bitset даёт именованные операции и двоичный вывод.

C

Циклы, указатели, длины и буферы задаются явно.

C++

Итераторы и алгоритмы отделяют операцию от хранения.

Практические задания

Запустите обе версии и изменяйте их, сравнивая гарантии языков.

  • Проследите каждое сравнение.
  • Проверьте дубликаты и крайние значения.
  • Сравните со стандартной библиотекой.