實用的位運算應用
對於位運算,之前在一篇博文中分享了一下在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
- 運算子的應用
- 位運算與SQL實現SQL
- 二進位制、位運算、位移運算
- 位運算
- 用python實現四則運算的生成與判定Python
- 位運算實現加減乘除
- 什麼?你還不會用位運算來操作狀態?
- alpakka-kafka(9)-kafka在分散式運算中的應用Kafka分散式
- 位運算子的計算
- 神奇的位非運算
- JS中的位運算JS
- Java中的位運算Java
- 位運算 --20240310
- 理解位運算
- 使用位運算進行加法運算
- android位運算講解與實戰Android
- 1的個數 【位運算】
- 無服務計算應用場景探討及 FaaS 應用實戰
- 一個不讓用加號的需求而引發的Java位運算詳解Java
- day14.邏輯運算,位運算
- 使用棧實現表示式求值,運用棧計算
- 【SSLOJ 3348】位運算
- 位運算-異或(^)
- 位運算總結
- 學習位運算
- 位運算進階
- PHP 位運算使用PHP
- 位運算小結
- 巧用JS位運算JS
- java二進位制運算十進位制(精確運算)Java
- 表示式計算(棧的應用)
- JuiceFS 在火山引擎邊緣計算的應用實踐UI
- Linux雲端計算有哪些應用範圍?Linux運維Linux運維