В C true
представлен 1, а false
- 0. Однако при сравнении любое неверное значение обрабатывается как true.
Оператор !
делает логическое инверсия, поэтому! 0 равно 1, а! 1 равно 0.
Оператор ~
, однако, производит побитовое обращение, где каждый бит в значениизаменено на обратное.Так что ~ 0 равно 0xffffffff (-1).~ 1 равно 0xfffffffe (-2).(И оба -1 и -2 считаются истинными, что, вероятно, вас смущает.)
То, что вы хотите, это !
вместо ~
.