Вы должны придерживаться -1 и 0 для истинного и ложного. Чтобы подтвердить, что ваш язык использует для true, просто присвойте ноль переменной (false), необязательно быть логическим, затем напечатайте not (variable), чтобы определить, что такое true. Это не работает наоборот, если исходное значение не равно -1. Оператор побитового «не» инвертирует все биты, а «-1» - это двухбитное число, в котором все биты установлены, обнуляют все биты. Если вы присваиваете переменную с любым другим ненулевым числом, использование поразрядного not все равно вернет true при преобразовании в логическое значение.
Один в двоичном коде - пятнадцать нулей и один. Отразите все эти биты, и вы получите пятнадцать, за которыми следует ноль, что является отрицательным значением, поскольку этот первый бит обозначает отрицательное число, но оно не будет отрицательным. Повторное переключение всех битов возвращает его к исходному значению - единице.
Дайте мне знать, если это не ясно.