The shell is not C. In C 0 is false, everything else is true. In the shell 0 is true/success, everything else is false. This is because there are many ways to fail, but one way to succeed.
Specifically from the info page, of test.
Exit status:
 0 if the expression is true,
 1 if the expression is false,
 2 if an error occurred.
 
                