8 апреля 2024 г. (изменено: 8 апреля 2024 г.)
Канал: @cherkashindev
XOR — исключающее или
Пару раз в год в нашем C# коде я встречаю оператор ^ и впадаю в ступор 🤦♂️. Через минуту другую я вспоминаю, что оператор называется “исключающее или” или XOR. Потом, проходит ещё пара минут (на самом деле больше) и я вспоминаю, как он работает и для чего применяется. Поэтому сегодня я решил написать пост, чтобы моим преподавателям не было стыдно запомнить этот оператор раз и навсегда.
1️⃣ Как работаете XOR?
Тут всё просто XOR - это сравнение, если A и B равны, то получаем 0, если разные 1
| A | B | A XOR B |
|---|---|---------|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
2️⃣ Перечисления — Битовые флаги
Каждое значение, представляет собой степень двойки (один бит), что помогает удобно хранить и передавать несколько значений.
[Flags]
enum Permissions
{
None = 0, // 000
Read = 1, // 001
Write = 2, // 010
Execute = 4 // 100
All = Read | Write | Execute // 111
}3️⃣ Применение XOR с битовыми флагами:
Оператор XOR часто используется для добавления и удаления определенных битовых флагов.
Permissions myPermissions = Permissions.Read | Permissions.Execute;
// Добавление прав на запись
myPermissions ^= Permissions.Write; // 101 ^ 010 = 111
// Удаление прав на выполнение
myPermissions ^= Permissions.Execute; // 111 ^ 100 = 011 @cherkashindev