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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

位操作的细节

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 位操作的细节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、位操作符

(1)位與&

  • 位與符號是一個&,兩個&&是邏輯與。
  • 位與時兩個操作數是按照二進制位彼次對應位相與的,邏輯與是兩個操作數作為整體來相與的。(舉例:0xAA&0xF0=0xA0, 0xAA && 0xF0=1)

(2)位或|

  • 位或符號是一個|,兩個||是邏輯或。
  • 位或時兩個操作數是按照二進制位彼次對應位相與的,邏輯或是兩個操作數作為整體來相或的。

(3)位取反~

  • C語言中位取反是~,C語言中的邏輯取反是!;
  • 按位取反是將操作數的二進制位逐個按位取反,而邏輯取反是真(在C語言中只要不是0的任何數都是真)變成假(在C語言中只有0表示假)、假變成真。

(4)位異或^

(5)左移位<<,右移位>>

  • C語言的移位要取決于數據類型。
  • 對于無符號數,左移時右側補0(相當于邏輯移位),右移時左側補0(相當于邏輯移位)。
  • 對于有符號數,左移時右側補0(叫算術移位,相當于邏輯移位),右移時左側補符號位(如果正數就補0,負數就補1,叫算術移位)。
  • 嵌入式中研究的移位,以及使用的移位都是無符號數。

二、位操作在操作寄存器時的特殊作用

1、寄存器操作的要求:特定位改變而不影響其他位

  • ARM是內存與IO統一編址的,ARM中有很多內部外設,SoC中CPU通過向這些內部外設的寄存器寫入一些特定的值來操控這個內部外設,進而操控硬件動作。
  • 寄存器的特點是按位進行規劃和使用,但是寄存器的讀寫卻是整體32位一起進行的(也就是說你只想修改bit5~bit7是不行的,必須整體32bit全部寫入)。
  • 寄存器操作要求是在設定特定位時不能影響其他位。
  • 讀-改-寫三部曲。當想改變一個寄存器中某些特定位時,先讀出寄存器整體原來的值,然后修改特定位,再將修改后的值整體寫入寄存器。。

2、特定位清零用&

3、特定位置1用|

4、特定位取反用^

  • (任何數,其實就是1或者0)與1位異或會取反,與0位異或無變化。
  • 要取反的特定位為1,其他位為0,然后將這個數與原來的數進行位異或即可。


三、使用位操作構建特定的二進制數

  • 如果要的這個數比較少位為1,大部分位為0,則可以通過連續很多個1左移n位得到。
  • 如果要的數是大部分位為1,則可以通過先構建其位反數,然后再位取反來得到。
  • 如果要的數中連續1(連續0)的部分不止1個,那么可以通過多段分別構造,然后再彼此位與即可。

四、使用用宏定義來完成位運算



總結

以上是生活随笔為你收集整理的位操作的细节的全部內容,希望文章能夠幫你解決所遇到的問題。

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