Битовые операции
Эта статья продвинутая. Её можно пропустить при первом чтении раздела и вернуться позже, когда появятся задачи с флагами, регистрами микроконтроллера или компактным хранением состояний.
Бит — это 0 или 1. Битовые операции работают не со всем числом как с величиной, а с отдельными двоичными разрядами числа.
Зачем это нужно
В робототехнике битовые операции встречаются, когда нужно:
- хранить несколько флагов в одном числе;
- включать или выключать отдельный бит;
- проверять состояние регистра;
- читать документацию микроконтроллера;
- передавать компактные команды.
Для первых программ с переменными, условиями и циклами битовые операции не нужны.
Биты числа
Число 5 в двоичном виде можно представить так:
5 = 00000101
Единицы стоят в разрядах 0 и 2.
AND
Операция & оставляет единицу только там, где единицы есть с двух сторон.
0101
0011
----
0001
Пример:
#include <iostream>
using namespace std;
int main() {
int a = 5;
int b = 3;
cout << (a & b) << endl;
return 0;
}
Вывод:
1
OR
Операция | ставит единицу, если единица есть хотя бы с одной стороны.
0101
0011
----
0111
#include <iostream>
using namespace std;
int main() {
int a = 5;
int b = 3;
cout << (a | b) << endl;
return 0;
}
Вывод:
7
XOR
Операция ^ ставит единицу, если биты различаются.
0101
0011
----
0110
#include <iostream>
using namespace std;
int main() {
int a = 5;
int b = 3;
cout << (a ^ b) << endl;
return 0;
}
Вывод:
6
Маска
Маска — число, в котором важные биты отмечены единицами.
#include <iostream>
using namespace std;
int main() {
int state = 5;
int mask = 1;
if ((state & mask) != 0) {
cout << "on" << endl;
} else {
cout << "off" << endl;
}
return 0;
}
Здесь проверяется самый младший бит.
Сдвиги
<< и >> сдвигают биты числа.
#include <iostream>
using namespace std;
int main() {
int a = 1;
cout << (a << 1) << endl;
cout << (a << 2) << endl;
return 0;
}
Вывод:
2
4
Для положительных небольших чисел сдвиг влево похож на умножение на 2. Но в реальном низкоуровневом коде важно учитывать размер типа и документацию платформы.
Практика
- Посчитайте результат
6 & 3вручную в двоичном виде. - Проверьте в программе
6 | 3. - Проверьте младший бит числа
8через маску1. - Создайте маску
4и проверьте третий бит числа5. - Объясните, почему этот урок отмечен как продвинутый.
Проверьте себя
- Что такое бит?
- Что делает
&? - Что делает
|? - Что делает
^? - Зачем нужна маска?
- Где битовые операции встречаются в робототехнике?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
| Термин | Значение |
|---|---|
| бит | двоичный разряд 0 или 1 |
| маска | число для выбора нужных битов |
| AND | битовое «и» |
| OR | битовое «или» |
| XOR | битовое исключающее «или» |
| сдвиг | перемещение битов влево или вправо |
Связанные темы
- Переменные и типы данных — целые числа.
- Конструкция ветвления — проверка результата маски.
- Что почитать и изучать дальше — низкоуровневые темы.
Источники
- C++ Working Draft. Bitwise operators: https://eel.is/c++draft/expr.bit.and
- Microsoft Learn. Bitwise operators: https://learn.microsoft.com/en-us/cpp/cpp/bitwise-and-operator-amp