與運算 總結

2021-10-25 17:07:53 字數 1477 閱讀 6514

與的概念:與運算是通過比較二進位制位,同為1才為1,否則都為0

與運算的常用方式:

對於乙個數(a)來說:

根據以上結論,我們來簡單的做幾個題測試一下它的作用。

題1:判斷乙個數的奇偶性:

題目分析: 根據以上結論,a與1的結果如果為1,則這個數是奇數,如果為0,則這個數是偶數,因為乙個奇數的最低二進位制位必定為1,所以我們可以直接讓這個數去和1做與運算,結果結果為1就是奇數,否則為偶數。

public

static

void

main

(string[

] args)

題二:讓乙個數的二進位制位上的奇偶位互換:

題目分析: 根據以上結論,a與0xaaaaaaaa可以保留a的二進位制位上偶數字上的1, a與0x55555555可以保留a的二進位制位上奇數字上的1,這樣,我們就能分別獲取a的奇數字上的1的二進位制數b,以及a的偶數字上的1的二進位制數c,這個時候如果把b和c進行異或(^)運算,那麼就會恢復成a,這樣就剛好成對了。為了更加形象,下面我們來一段資料分析:

設乙個數num = 9;

那麼它的二進位制表現形式為:00000000 00000000 00000000 00001001(正數的原碼、反碼、補碼相同,三碼合一)

0xaaaaaaaa的二進位制形式為:10101010 10101010 10101010 10101010(進行與運算必須是在補碼的基礎上進行操作,負數的話需要先轉換為補碼)

0x55555555的二進位制形式為:01010101 01010101 01010101 01010101

num&0xaaaaaaaa的結果b為: 00000000 00000000 00000000 00001000

num&0x55555555的結果c為: 00000000 00000000 00000000 00000001

這時候,如果我們把b和c異或一下,可以發現,它們又恢復成了num

b^c = 00000000 00000000 00000000 00001001,正好對應數字9,那麼我們應該如何去交換奇偶的二進位制位呢?通過觀察,我們可以發現1001奇偶互換之後的數應該為0110,也就是6,而這個結果我們應該如何獲得呢?這裡就需要用到位運算了,前面我們分析過了,通過&0xaaaaaaaa和0x55555555可以分別保留偶數字和奇數為上的二進位制數,那麼我們只需要讓保留了偶數字的結果右移一位,保留了奇數字的結果左移一位,然後再對他們進行異或操作,就能夠得到二進位制互換之後的數,分析清除之後,**就很簡單了,一句**就能搞定:

public

static

intdemo

(int num)

位運算總結 之 與

1 判斷奇偶 乙個數二進位制的末位數是1,則該數是奇數,末位數是0,則該數是偶數。因此可以用 a 1 0來判斷。如下例 include using namespace std int main cout endl return 0 2 消除尾一 消除最後出現的1 x x 1 如 用 o 1 時間檢測...

位運算總結與應用

一 求下面函式的返回值 int func x return count 功能 將x轉化為2進製,看含有的1的個數。每執行一次x x x 1 會將x用二進位制表示時最右邊的乙個1變為0,因為x 1將會將該位 x用二進位制表示時最右邊的乙個1 變為0。二 下面函式的作用 bool func int x ...

位運算總結

位運算是指按二進位制進行的運算。在系統軟體中,常常需要處理二進位制位的問題。c語言提供了6個位操作 運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。c語言提供的位運算子列表 運算子 含義 描述 按位與 如果兩個相應的二進位制位都為1,則該位...