邏輯運算0==x和x==0詳解

看許多大牛寫的程序常常看到if(0==x){執行體},而自己寫的程序常常使用if(x==0){執行體}。剛開始的時候我還很自信的認爲這種表達方式是等價的,大牛們只是爲了顯擺下與衆不同的格調。當讀到C語言運算法結合性這部分的內容才恍然領悟大牛的考慮周全。分析過程如下:

“=”運算符的結合性是右結合(從右向左)"=="運算符的結合性是左結合。

0=i這種格式錯誤的 0==i和i==0是一樣的。

看到這大家是不是明白了點。if(0==i)這麼寫的,是爲了防止“==”寫成“=”。如果不小心將“==”寫成“=”

如何採用if(x==0)形式寫就變成了if(x=0),即使寫錯編譯器也不會報錯。如果採用if(0==x)形式寫就變成了if(0=x),編譯器就給出報錯。在VC中會報error C2106: “=”: 左操作數必須爲左值的錯誤。

寫個程序測試下:

// Test_zeroeqx.cpp : 定義控制檯應用程序的入口點。
//

#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
	int x=0;
	/*大牛的寫法*/
	if(0==x)
		printf("x=0");
	else if(0!=x)
		printf("x!=0");
	/*一般人的寫法當x==0寫成了x=0程序正常執行 結果是x=0 x!=0*/
	if(x=0)
		printf("x=0");
	else if(x!=0)
		printf("x!=0");
         /*去掉註釋可以看出x=0返回false值*/
        /*
        bool isZero;
        isZero=(x=0);
        if(isZero)
         printf("x=0返回false")
        else
         printf("x=0返回false");
         */
         getchar();
          return 0;
}



從測試程序可以看出,x=0返回false值。如果將"=="不小心寫成"=",如果按照一般人的寫法,我們很難發現錯誤。而是用大牛的寫法,編譯器直接報錯。


發佈了49 篇原創文章 · 獲贊 16 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章