實用的位運算應用

jeanron100發表於2015-04-05
對於位運算,之前在一篇博文中分享了一下在c語言和oracle中的位運算實現 http://blog.itpub.net/23718752/viewspace-1440273/
但是關於位運算的實際應用還是有感覺有些空中樓閣,理論提升到一定的高度,但是實際應用無從下手的話,本身沒有太大的實際意義。
教科書中有一個章節是關於位運算的應用,但是其中的例子,感覺不是很通俗,整理了一些小例子,感覺還是比較實用的。
1.變數交換
這個例子在筆試面試中可能還會考到,不需要設定臨時變數,怎麼快速交換兩個變數的值。比如a=100,b=200;
採用下面的方式,就會交換變數的值,最後的輸出是200,100
a ^= b;
b ^= a;
a ^= b;
2.資料型別的範圍
對於開發語言中的資料型別範圍,比如我們說範圍是2^31-1,我們可能沒有什麼概念,我們可以透過位運算來很方便地得到結果。
比如2^31-1的結果,可以採用如下的方式來實現。
(1<<31)-1
結果就是2147483647,這樣看起來是不是就清晰多了。
在java中,  (1<<31)-1 可以等價於 -(1<
3.判斷奇偶性
可以使用(n & 1) == 1 來判斷是否為奇數還是偶數,返回true則為奇數,false則為偶數。
比如我們輸入n=56757568,則返回false

4.比較兩個數的大小
比較兩個數可以透過下面的形式來完成大小的比較,感覺有些複雜,但是算是通用的版本。
y&((x-y)>>31) | x&(~(x-y)>>31)
比如我們輸入x=3,y=2 則返回 3
如果需要返回兩個數中較小的數,則簡單改動一下即可。
x&((x-y)>>31) | x&(~(x-y)>>31)
比如我們輸入x=3,y=2,則返回2

5.兩個數的平均數
如果需要求得兩個數的平均數,可以透過下面的形式來完成。
(x+y) >> 1
如果x=21,y=41, 則平均數的結果為31

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1503921/,如需轉載,請註明出處,否則將追究法律責任。

相關文章