strcat(b, ((x & z) == z) ? "1" : "0");
Я понимаю strcat()
Функция и условный (тройной) оператор. Но я не знаю, что означает (x & z) == z
.Что означает сингл & в следующем выражении?
strcat(b, ((x & z) == z) ? "1" : "0");
Я понимаю strcat()
Функция и условный (тройной) оператор. Но я не знаю, что означает (x & z) == z
.Что означает сингл & в следующем выражении?
&
- побитовый оператор И.
здесь, (x & z) == z
средства, выполнить побитовое И x
и z
и если это значение равно z
, то ....
Ref: Глава 6.5.10, C11
стандарт, "побитовое И оператор"
Результат двоичного оператора
&
является побитовым И из операндов (то есть каждый бит в результате устанавливается тогда и только тогда, когда каждый из соответствующих битов в преобразованных операндах задан).
средства:
Concatenate "1"
в строку b
если побитовое И x
и z
является такой же, как z
, еще CONCATENATE "0"
в строку b
.
x&z
означает побитное обращение x
и z
.
Результат затем сравнивается с z
.
Если результат такой же, как z
, тогда условие будет TRUE иначе FALSE.
(x & z) == z означает в 'x', ВСЕ биты, которые являются SET в 'z', являются SET.
«x» должен содержать все установленные биты ИЛИ дополнительно могут быть установлены еще несколько бит. Тогда это условие становится истинным.
https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Bitwise_operators –
'(х & г) == z' может быть прочитана как«х содержит г» – harold