C语言种if只区分0与非0

以前一直想当然认为t<=0,那么if(t){}不会执行,今天才发现if把0当作flase,其它全为true。

int main(){ if(-1){ printf("1"); } if(0){ printf("2"); } if(1){ printf("3"); } if(!(-1)){ printf("4"); } if(!0){ printf("5"); } if(!1){ printf("6"); } return 0; }

结果
135

【C语言种if只区分0与非0】本质上是因为cpu做逻辑计算的时候都是做无符号数拓展,所有数都是当作无符号来看待的。因此if中的负数计算结果实际上是相当于强转成了unsigned int。

    推荐阅读