В конечном счете, этот код проверяет, включен ли в переменной uop->flags
один бит (флаг FCTRL).
Но вот некоторые объяснения:
Неявно, код if(X)
проверяет, является ли X истинным значением.Для целых чисел 0 - единственное «ложное» значение, а все остальное - «истина».
Поэтому ваш код эквивалентен:
if (0 != (uop->flags & FCTRL))
Теперь, чтоэто означает?
Оператор &
выполняет "побитовое И", что означает, что каждый бит левой части равен И с соответствующим битом на правой стороне.
Так что, если мы записали два наших операнда в двоичном виде:
uop->flags 1010 1010 (example)
FCTRL 0100 0000
В этом примере, если вы выполните «И» для каждой пары битов, вы получите результат:
result 0000 0000
, который оценивается как ложное, и действительно в этом примере значение uop->flags
не имеет установленного флага FCTRL.
Теперь вот еще один пример, где установлен флаг :
uop->flags 1110 1010 (example)
FCTRL 0100 0000
Соответствующий результат ANDed:
result 0100 0000
Этот результат не равен нулю, поэтому "true", вызывая оператор if
.