С логическими значениями нет никакой разницы между ними.Вы можете поменять местами && и & или ||и |и это никогда не изменит результат вашего выражения.
Разница заключается в сцене, где обрабатывается информация.Когда вы правите выражение "(a! = 0) & (b! = 0)" для a = 0 и b = 1, происходит следующее:
left side: a != 0 --> false
right side: b 1= 0 --> true
left side and right side are both true? --> false
expression returns false
Когда вы пишете выражение (a != 0) && ( b != 0)
когда a = 0 и b = 1, происходит следующее:
a != 0 -->false
expression returns false
Меньше шагов, меньше обработки, лучше кодирование, особенно когда выполняется много логических выражений или сложных аргументов.