實用的位運算應用
對於位運算,之前在一篇博文中分享了一下在c語言和oracle中的位運算實現 http://blog.itpub.net/23718752/viewspace-1440273/
但是關於位運算的實際應用還是有感覺有些空中樓閣,理論提升到一定的高度,但是實際應用無從下手的話,本身沒有太大的實際意義。
教科書中有一個章節是關於位運算的應用,但是其中的例子,感覺不是很通俗,整理了一些小例子,感覺還是比較實用的。
1.變數交換
這個例子在筆試面試中可能還會考到,不需要設定臨時變數,怎麼快速交換兩個變數的值。比如a=100,b=200;
採用下面的方式,就會交換變數的值,最後的輸出是200,100
對於開發語言中的資料型別範圍,比如我們說範圍是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
但是關於位運算的實際應用還是有感覺有些空中樓閣,理論提升到一定的高度,但是實際應用無從下手的話,本身沒有太大的實際意義。
教科書中有一個章節是關於位運算的應用,但是其中的例子,感覺不是很通俗,整理了一些小例子,感覺還是比較實用的。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 位運算的應用
- 位運算子及其應用
- 用位運算為你的程式加速
- 談談位運算和在Android中的運用Android
- java位運算子的應用範圍Java
- 棧的應用——計算器的四則運算
- 按位運算子在java中的應用?Java
- 如何巧妙著運用「位運算」來解決問題?
- (位運算)兩個字串的位運算字串
- C語言 僅用位設定和位清除表示位運算C語言
- ?【圖】用圖片告訴你Java中的位運算Java
- Tesla™ GPU高效能運算應用案例GPU
- 位運算與SQL實現SQL
- 二進位制、位運算、位移運算
- 位運算在讀取某幾位數字和加密中的應用加密
- 位運算
- iOS應用如何實現64位的支援iOS
- 位運算可以實現哪些功能
- 位運算實現加減乘除
- 什麼?你還不會用位運算來操作狀態?
- JS中的位運算JS
- Java中的位運算Java
- 位運算子的計算
- 理解位運算
- SQL位運算SQL
- alpakka-kafka(9)-kafka在分散式運算中的應用Kafka分散式
- 使用位運算進行加法運算
- 用python實現四則運算的生成與判定Python
- Electron 實戰桌面計算器應用
- oracle的long型別欄位的應用-- 實戰篇Oracle型別
- JAVA運算元據庫方式與設計模式應用Java設計模式
- 學習位運算
- PHP 位運算使用PHP
- 位運算進階
- 位運算總結
- 巧用JS位運算JS
- 位運算-異或(^)
- 使用棧實現表示式求值,運用棧計算