8 апреля 2024 г. (изменено: 8 апреля 2024 г.)

Канал: @cherkashindev

912

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

👍 11 3 😁 1