Использование (1<<x)
в определении дает понять, что значение представляет собой один бит, а не число.
Для компилятора это не имеет значения, поскольку (1<<2)
вычисляется во время компиляции, а не вво время выполнения.Четко показать, что они являются однобитными значениями, вместо этого полезно для любого, кто читает код, потому что, например, они могут быть несколькими значениями, которые могут быть объединены, или что одна переменная может использоваться для хранения нескольких флагов:
// Multiple options are combined with bitwise-or
show_message(DSF_CAPTION|DSF_ALERT, "Hey...");
...
// Checking is made using bitwise-and, not equality
if (status & DSF_RUNNING)
...
Кроме того, иногда требуется наличие определенных битов при работе с оборудованием (например, на определенном порту ввода / вывода может потребоваться указать пятый бит, потому что именно так аппаратное обеспечение подключено, и (1<<4)
более читабельно, чем 16
длячто).