Битовые операции: различия между версиями
Материал из Algocode wiki
Глеб (обсуждение | вклад) |
Глеб (обсуждение | вклад) |
||
(не показано 10 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
===Проверка, что $i$-й элемент в множестве $num$=== | ===Проверка, что $i$-й элемент в множестве $num$=== | ||
− | + | <syntaxhighlight lang=C++ line=True> | |
+ | if ((num >> i) & 1) { | ||
+ | cout << "YES"; | ||
+ | } | ||
+ | else { | ||
+ | cout << "NO"; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | вернет 1 тогда и только тогда, когда $i$-й элемент в множестве $num$, так как $(num >> i)$ вернет нам число $num$ со сдвигом на $i$ и следовательно 1 символ будет равен 1, если элемент в множестве. | ||
===Добавить $i$-й элемент в множество $num$=== | ===Добавить $i$-й элемент в множество $num$=== | ||
− | $num | + | <syntaxhighlight lang=C++ line=True> |
+ | |||
+ | num |= (1 << i) | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Удалить $i$-й элемент из множества $num$, если он есть=== | ||
+ | |||
+ | <syntaxhighlight lang=C++ line=True> | ||
+ | num ^= (1 << i) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Удалить $i$-й элемент из множества $num$=== | ||
+ | |||
+ | <syntaxhighlight lang=C++ line=True> | ||
+ | num &= ~(1 << i) | ||
+ | </syntaxhighlight> | ||
− | {{Автор|Лобанов Глеб|glebodin} | + | {{Автор|Лобанов Глеб|glebodin}} |
Текущая версия на 09:33, 13 декабря 2019
Содержание
Проверка, что $i$-й элемент в множестве $num$
1 if ((num >> i) & 1) {
2 cout << "YES";
3 }
4 else {
5 cout << "NO";
6 }
вернет 1 тогда и только тогда, когда $i$-й элемент в множестве $num$, так как $(num >> i)$ вернет нам число $num$ со сдвигом на $i$ и следовательно 1 символ будет равен 1, если элемент в множестве.
Добавить $i$-й элемент в множество $num$
1 num |= (1 << i)
Удалить $i$-й элемент из множества $num$, если он есть
1 num ^= (1 << i)
Удалить $i$-й элемент из множества $num$
1 num &= ~(1 << i)
Автор конспекта: Лобанов Глеб
По всем вопросам пишите в telegram @glebodin