【人生苦短,遠離bug】——C語言操作符

u32Count = 2 ^ 32-1;//表達式1
u32Count = pow(2, 32)-1;// 表達式2

很簡單的兩個表達式,卻讓同事栽了跟頭。

事情是這樣的,今天在調試代碼的時候,看到一位同事代碼中出現了表達式1。根據上下文可以看到,他實際希望傳遞32位全1值。然而實際運行時,發現u32Count的值爲0x21。
崩潰中,我們前期review代碼也沒注意,哈哈哈哈,集體忽視了。
實際上,他把數學中的符號和C語言中的操作符搞混淆了,完全搞錯了。2^32可不就是異或操作,結果爲34,即0x22,減一爲0x21。
表達式2是正確的,另外我們常用的方式是定義一個0xFFFFFFFF的宏定義,作爲32位全1,不會用公式計算。
在這裏插入圖片描述
人生苦短,遠離bug

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章