建議2 避免那些由運算子引發的混亂

2021-07-10 20:12:09 字數 636 閱讀 8315

一般,c++被認為是c的超集。c++確實從它的前輩c那裡繼承了很多東西,比如一套含義相當混亂模糊的運算子。由於c/c++語法規則的靈活性,以致那些粗心的程式設計師常會使用錯誤的運算子,進而引發不必要的麻煩。下面的**就是乙個典型的例子:

if(nvalue = 0)

顯然,程式設計師的本意是要寫if(nvalue==0)。不幸的是,上述語句雖未達成程式設計師的本意,但它卻完全是合法的,編譯器不會給出任何錯誤提示。c++語句首先會將nvalue賦值為0,然後再判斷nvalue是否為非零。結果就是if條件始終不能被滿足,大括號中的**永遠不會被執行。

針對=和==之間的問題,通過良好的**習慣可以避免,**如下所示:

if(0 == nvalue)

換句話說,就是將0和nvalue的位置交換。此時,如果你再寫出if(0=nvalue)這樣的**,編譯器會直截了當地提示,發生了錯誤,編譯失敗。原因在於0=nvalue這樣的**在c++語法中是不允許的,常數0不能作為左值來使用。

除了上述運算子,其他幾對容易弄錯的運算子是&(按位與)和&&(與),以及|(按位或)和||(或)。對於這兩對運算子,能夠避免錯誤的只有細心。

請記住:

不要混淆=和==、&和&&、|與||這三對運算子之間的差別,用細心和良好的**習慣避免由於運算子混亂帶來的麻煩。

由右移運算子引發的思考(計算機原理)

輸出 50 5,得到 2,結果向下取整 輸出 50 32得到 1,結果向上取整。思考是如何在計算機內部實現的?首先需要知道 計算機中所有數都是以補碼形式儲存的。簡單說一下符號位0為正,1為負。移碼相反。50的二進位制是110010,那麼 50的表示如下 原碼 1110010,即在二進位制前面加上符號...

由C 中的自增 自減運算子引發的思考

今天看到csdn上又有初學c 的朋友問到c 中自增 自減運算子字首 字尾形式的運算子使用的問題,覺得這個問題很普遍的,應該問到的挺多的,這麼多年在考試題 面試題中幾乎是個必考的問題,先不去說相關的知識點,我就想看一下關於這個問題討論的現狀,結果發現很多人討論得還挺 深入 比如 int n 0,m 0...

由邏輯異或運算子而發現的PHP詭異運算子優先順序

php的邏輯運算子中,xor表示邏輯異或 a xor b結果 如果 a 和 b 有且僅有乙個為 true,則返回 true 如果都是true 或 false,則返回false。然而在測試xor運算子時,發現一點問題 錯誤情況1 a false xortrue var dump a 結果1 boole...