前幾天自己寫了一段bcd的求和函式,
一次加了四個資料。
結果測試時,發現結果錯的一塌糊塗,分析了半個小時,最後得出的結論是這種寫法有問題。
但錯在**,很真不知道。
只好拆開來計算,結果就是對的。後來同事提醒說是不是括號出問題了。
如夢方醒,
再看下程式,
發現&,>>運算和+一起運算,卻沒有括號改變運算順序,
這不出錯也難。
後來改正後,
再測試和之前單個相加,也一樣了。
乙個括號,釀成的悲劇。
所以在多優先順序運算時,像《c專家程式設計》裡講的還是加上括號好些,
也不用去考慮因為優先順序不對出現的錯誤了,至少避免的錯誤出現的可能性。
最近在檢查**時,又發現早前犯下的因為優先順序造成的錯誤,趕緊改過來了。
看來以後寫的時候,括號還是加上為妙。有時候可能會看起來複雜,
但是很容易分清,每一部分的作用,也不用去背優先順序,雖然有些取巧,
但確實能避免不少的bug。
測試**如下(分開相加):
int bcd2sum(unsigned char * disdata, unsigned char * srcdata)
return i;
}
加上括號的情況:
int bcd2sum(unsigned char * disdata, unsigned char * srcdata)
return i;
}
C中括號優先順序的思考
問題源於論壇的一道題目 下面是問題 設int arr int ptr arr ptr 123 printf d,d ptr,ptr 答案為什麼是 8,8 問題的焦點也落在printf執行的問題上,到底先執行誰,後執行誰,還有部分有才青年將該問題中庸化,覺得跟編譯器有關。執行的順序真的跟編譯器有關嗎?...
的優先順序大小 需求價值與優先順序
我們會接到不同 的需求,有的 於業務部門 領導要求,有的 於使用者反饋 線上問題,有的是市場反饋建議,或者競品已支援等等。收到原始需求之後,我們怎麼知道哪些需求要做?哪些需求要優先做,哪些可以往後排?或者在需要澄清需求價值時,我們要回答哪些問題後,才算講清楚了需求價值。又如何做需求的優先順序排序。首...
sql指令碼中的優先順序(and or 和 括號)
二月初三辛丑年 牛辛卯月 壬戌日 好多天沒更博了,為啥呢,因為我的需求上線了,然後又被bibibi了,其中各種心酸背鍋以及瑟瑟發抖。天吶 回來繼續說,今天乙個sql的修改 需求是這樣的 在乙個日期範圍內 2020 03 01至2021 03 12 查詢人員型別為 1003 1004 1006 的資料...