В C целочисленное значение 0 считается ложным, когда используется в логическом контексте, тогда как любое ненулевое значение считается истинным в логическом контексте.
Значения enum
начинаются с 0 иувеличить, если не указано иное, поэтому для созданного вами перечисления false
имеет значение 0, тогда как true
имеет значение 1.
В операторе if (!isOn)
, !
оператор изменяет логическое значение данного выражения, с !0
, равным 1, и любым другим заданным значением, равным 0
.Поскольку isOn
имеет значение 0, !isOn
имеет значение 1, поэтому оператор if
имеет значение true и печатается "IS FALSE"
.