I am not sure about the error but I can explain about the other 2.
When anything becomes zero its equal to false or else its true. In C there is nothing bool but everything is with respect to 0 and Non zero. 0 being false and Non Zero is true.
Say if you have something like if(1) will always be true.
Regarding precedence try expanding the macro on pen and paper and you will see both evaluation does not come out to be same.