Они не могут быть такими, хотя было бы заманчиво предположить, что a && b
можно записать как !!a & !!b
и a || b
как !!a | !!b
.
Это потому, что ||
и &&
имеют свойство, при котором вычисление второго аргумента не происходит, если результат выражения известен из результата первого аргумента.Например, для true || A
, A
не оценивается, а для false && B
, B
не оценивается.Поэтому, если вы попытались реплицировать либо ||
, либо &&
с помощью побитовых операторов, то вы вполне могли бы ввести побочные эффекты в вашу программу.
Также ||
и &&
являются точками секвенирования , тогда как побитовые операторы - нет.Так, например, a++ && a++
определено, но a++ & a++
не определено.