利用位操作實現簡單的功能

2021-07-14 23:13:51 字數 1002 閱讀 1501

位操作雖然會降低程式的可讀性,但是我想,熱衷於位操作的人大概都是被它的效率所吸引了。如果某些簡單但常用的功能可以利用位操作實現,且用位操作實現的**量相同或更少,我希望讓這些位操作得到普及。

在介紹之前,先列舉一下位操作符

a&b     //按位與

a|b //按位或

a^b //按位異或

~a//按位取反

aa>>b //有符號右移

a>>>b //無符號右移

1. 交換兩個整數的值

剛開始接觸程式設計的時候我以為交換兩個變數一定需要乙個臨時變數,但是利用位操作交換兩個整數不必需要第三個變數。請看下面的例子:

int a = 9

;int b = 11

;a=a^b; //1001^1011=0010

b=b^a

; //1011^0010=1001

a=a^b; // 0010^1001=1011

如此便可以交換兩個整數的值而不必用第三個引數

2.快速判斷兩個值時候相等

在學彙編的時候我們也是用xor ax,ax來置零,而並非sub ax,ax。同樣道理,要判斷兩個int數字a,b是否相等,很多人會想到判斷a - b == 0,但是如果判斷a ^ b == 0效率將會更高。

3.判斷奇偶性

利用位操作判斷奇偶性可以寫成

int a=5;

return a&1; //偶數返回0,奇數返回1

4.除以2 & 乘以2

int a=5;

a>>1; //除以2

a<<1; //乘以2

利用函式實現簡單功能

1.實現乙個函式,列印乘法口訣表,口訣表的行數和列數自己指定,輸入9,輸出9 9口訣表,輸出12,輸出12 12的乘法口訣表。include include void mul int n printf n int main 2.使用函式實現兩個數的交換。include void swap int p...

位操作的簡單使用

首先列舉出以下幾個常用的位操作符 與 或 非 異或 左移 右移 作用 1 與 a b 當a和b都為1時,結果為1否則為0 int a 0x11 a 0xf0 此時a 0x10對以上步驟詳解如下 先將十六進製制數a與0xf0轉換為二進位制,然後按位相與 0x11 0001 0001 0xf0 1111...

簡單的位排序實現

程式珠璣中第一章問題中,給出的實現是基於int型陣列的,我自己改改採用char字元陣列實現。簡單說明一下,因為採用的是char型別,那麼乙個字元佔據的位數就是bitsperchar sizeof char 8了,那麼如果有n位數字需要排序,那麼需要的陣列大小就是n bitsperchar 1。字元陣...