rezident (22.09.2007 02:33, просмотров: 900) ответил Неофит на Почему WinAVR по разному компилирует? И какие типы данных использовать?
~ (тильда) это битовая операция инверсии, а ! это логическая операция отрицания. Если вы не понимаете между ними разницы, то это печально. Результат операции логического отрицания может быть отличным от операции инверсии, в зависимости от типа применяемой логики (положительная логика - 0=false, (не 0)=true и отрицательная логика 0=true, (не 0)=false). Кто-нибудь возьмет и определит типы как
#define true 0
#define false 1
и все! Трындец вашей программе настанет. Лично я предпочитаю всегда в логических операциях явно делать сравнение (с нулем, как это в ALU большинства микроконтроллеров реализовано), без выпендрежа и без глупой надежды, что 0 это всегда false, а !0 это всегда true. При таком подходе тип применяемой логики по-барабану.