Я наткнулся на статью, в которой упоминалось, что результат! 0 зависит от компилятора. Результатом может быть 1 или FF или FFFF и т.д.
Что касается стандарта C99 6.5.3.3 Унарные арифметические операторы,
Результат оператора логического отрицания! 0, если значение его операнда сравнивается не равно 0, 1, если значение его операнда сравнивается с равным 0. Результат имеет тип int. Выражение! E эквивалентно (0 == E).
Действительно ли он зависит от компилятора?