今天跟大家分享位運算的幾個使用小技巧,這些巧妙操作都是要在項目開發(fā)或者學習中不斷積累的,如果你在后續(xù)的編碼中用上的話,不僅能夠提高代碼效率,還能為你的代碼增色不少。
1、替代乘除2
這一點應該是基本操作了,我也在往期的文章中提到過多次。

特別是常用定點MCU的朋友,相信一點更是有自己的領悟,即使所使用的MCU帶有硬件浮點運算功能,采用整形定點運算也經常用來提高運算速度。
2、異或交換兩數(shù)
也就是我們面試題中常提到的,不用第三個變量交換兩個數(shù):

3、判斷兩數(shù)是否同號
大部分朋友判斷兩個不為0的數(shù)是否同號都是采用兩數(shù)相乘是否>0來進行判斷,當然我也見過如下寫法的:

雖然兩種最終的結果,但總讓人覺得有點太初級、太累贅的感覺,所以代碼還是要寫得優(yōu)雅,才讓人覺得你有點東西。
如果你稍加處理借用異或運算來進行判斷,會給人眼前一亮的感覺。

然而更重要的是相對乘法運算,其速度更快。
4、判斷奇偶數(shù)
判斷奇偶數(shù)無非就是識別該數(shù)是否能夠被2整除,通常我們采用如下表達式:

既然本文介紹位運算,又存在某種位運算會更加高效:

其無非就是利用了奇偶整形數(shù)的二進制最后一位是否為1來進行區(qū)分。
4、實現(xiàn)絕對值
實現(xiàn)絕對值還不簡單?abs用起來。
如果要不用條件語句實現(xiàn)絕對值功能,你會如何實現(xiàn)呢?
以8位整形數(shù)為例說明一下其實現(xiàn),其他字長的整形類似處理:

這里也算是異或的應用吧,異或操作"相同為0,相異為1",假如a是一個有符號正數(shù)整數(shù),a^0仍然為a,所以如上表達式對于整數(shù)仍然為原數(shù)。
而當a是一個有符號負值整形數(shù),要實現(xiàn)abs功能,勢必要“對原數(shù)取反+1“,然而巧妙的是a^0xFF剛好是對a取反,-(a>>7)則剛好是+1。
屬實巧妙,不禁有點喜歡上了異或操作運算。
審核編輯:劉清
-
mcu
+關注
關注
147文章
18934瀏覽量
398512 -
位運算
+關注
關注
0文章
17瀏覽量
8674
發(fā)布評論請先 登錄
跟大家分享位運算的幾個使用小技巧
評論