日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常用位运算技巧归纳

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常用位运算技巧归纳 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

位運算在嵌入式編程中比較常用,這里做一下歸納。

應用場景1

假設現有一個32位寄存器AX,定義低位第3位控制一個連著LED的引腳P3,定義位標志數

#define SWITCH_LED 0x0004

FAQ

  • 如何將P3拉高?

拉高即置1,使用或運算,即 AX |= SWITCH_LED。

如此運算,第三位會被置高,而其他位不會受影響(因為標志數的其他位為0,AX中任何值或上0還是它本身,所以不會產生變化)。

  • 如何將P3拉低?

拉低即清0,使用與運算,并且被與標志數要取反,即 AX &= ~SWITCH_LED。

如此運算,第三位會被清零,而其他位不會受影響(因為標志數的其他位經過反轉變為1,AX中任何值與上1還是它本身,所以不會產生變化)。

  • 如何將P3反轉(實現LED閃爍)

反轉即取反,使用異或運算,即AX ^= SWITCH_LED

如此運算,第三位會被取反,而其他位不受影響(AX中任何值和1異或會被取反,和0異或保持不變)。

  • 如何讀取P3的值?

直接求與運算:AX & SWITCH_LED,即為讀第三位的比特值。

通常在判斷語句中:if ((AX & SWITCH_LED) == SWITCH_LED),注意要帶括號防止優先級出問題。

應用場景2

實現按位加法(模2加減)。這里簡單補充一下。

  • BitA 異或 BitB = BitA 算數加?BitB,即異或運算等于按位加法(不管進位,進位需要其他運算或電路產生)

如:1 異或 0 = 1,0 異或 0 = 0,1 異或 1 = 0,0?異或 1 = 1

  • BitA 與 BitB = BitA 算數乘 BitB,即與運算等于按位乘法(不管進位,進位需要其他運算或電路產生)

如 1 與 0 = 0,1 與 1 = 1,0 與 1 = 0,0? 與 0 = 0

總結

以上是生活随笔為你收集整理的常用位运算技巧归纳的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。