ちょっと情報が交錯しているな。
Cの規格書の内容をまとめとくと、

・if文は非0かどうかを判断しているだけ。真偽は関係ない。
・真は非0。
・比較演算子は0か1を返す。

どうしてここまで話が縺れるか。それは、
・if文が真偽に従って分岐すると勘違する
・非0が常に真の意味だと履き違える
・比較演算子が0か1のみを返すということを知らない
人が多いからだろう。