邏輯運(yùn)算0==x和x==0詳解
來源:程序員人生 發(fā)布時(shí)間:2014-09-16 02:09:14 閱讀次數(shù):2870次
看許多大牛寫的程序常常看到if(0==x){執(zhí)行體},而自己寫的程序常常使用if(x==0){執(zhí)行體}。剛開始的時(shí)候我還很自信的認(rèn)為這種表達(dá)方式是等價(jià)的,大牛們只是為了顯擺下與眾不同的格調(diào)。當(dāng)讀到C語言運(yùn)算法結(jié)合性這部分的內(nèi)容才恍然領(lǐng)悟大牛的考慮周全。分析過程如下:
“=”運(yùn)算符的結(jié)合性是右結(jié)合(從右向左)"=="運(yùn)算符的結(jié)合性是左結(jié)合。
0=i這種格式錯(cuò)誤的 0==i和i==0是一樣的。
看到這大家是不是明白了點(diǎn)。if(0==i)這么寫的,是為了防止“==”寫成“=”。如果不小心將“==”寫成“=”
如何采用if(x==0)形式寫就變成了if(x=0),即使寫錯(cuò)編譯器也不會(huì)報(bào)錯(cuò)。如果采用if(0==x)形式寫就變成了if(0=x),編譯器就給出報(bào)錯(cuò)。在VC中會(huì)報(bào)error C2106: “=”: 左操作數(shù)必須為左值的錯(cuò)誤。
寫個(gè)程序測試下:
// Test_zeroeqx.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
#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");
/*一般人的寫法當(dāng)x==0寫成了x=0程序正常執(zhí)行 結(jié)果是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值。如果將"=="不小心寫成"=",如果按照一般人的寫法,我們很難發(fā)現(xiàn)錯(cuò)誤。而是用大牛的寫法,編譯器直接報(bào)錯(cuò)。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)