在oracle實踐學習位運算 第一篇
今天無意中看到了譚浩強先生的<>這本書,雖然c語言都是很多年前學過的東西了,但是看起來親切,實際用起來陌生,很多的概念都已經很模糊了,記得上大學時老師特別推薦的位運算這一部分,自己這次又看了下,還是有一定的收穫。
位運算非常的簡潔,使用起來看起來很高深,很有專業的味道,經常在一些筆試面試題中出現一些位運算的身影。而且個人覺得位運算確實是比較通用和精華的內容。
位運算是二進位制位的運算,c語言提供了位運算的功能,在其它的高階語言(java)中也有實現,還是具有一定的優勢的。
c語言中提供的位運算子有
按位與 & 按位或 | 按位異或 ^
取反 ~ 左移 << 右移 >>
這6種運算子中,除了取反~運算子外,其它的都是二目運算子,就是要求運算子兩側各有一個運算量,運算量是整型或者字元型的資料
先來看看按位與,基本的運算規則就是 0&0=0 ,0&1=0 ,1&0=0,1&1=1 因為是二進位制的運算,我們轉換成二進位制的方式來看就比較清楚了。
以3&5為例。
00000011
00000101 &
---------------
00000001
所以3&5按位與的結果就是1,
明白了這些基本內容,我們如果透過c語言,或者java來簡單測試是沒有問題的,我手頭有oracle的環境,那就用oracle來試試。
oracle中對於按位與是透過bitand來實現的。透過字面理解也很容易區別。
SQL> select bitand(3,5) from dual;
BITAND(3,5)
-----------
1
按位或
按位或的基本運算規則就是 0|0=0, 0|1=1,1|0=1,1|1=1
還是上面相似的例子3|5
00000011
00000101 |
---------------
00000111
所以按位或的結果就是7
當然了在oracle中可沒有直接的函式bitor
但是我們可以透過bitand來得到bitor的結果。
基本的公式就是bitor(x,y)=x+y-bitand(x,y)
所以bitor(3,5)=3+5-bitand(3,5)=8-1=7
按位異或
按位異或有時候也叫XOR運算子,它的運算規則是 0^0=0, 0^1=1, 1^0=1, 1^1=0
還是類似的例子。
3^5
00000011
00000101 ^
---------------
00000110
所以按位異或的結果就是6
在oracle中也沒有按位異或的函式bitxor,但是可以透過bitand來實現。
bitxor(x,y)=bitor(x,y) - bitand(x,y) = (x + y) - BITAND(x, y) * 2
所以bitxor(3,5)=3+5-2*1=6
說到這三種運算子,在oracle中也有它們的身影。
可以在utl_raw中得到,但是不同之處在於型別是raw,需要資料進位制的轉換。
SQL> desc utl_raw
FUNCTION BIT_AND RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
FUNCTION BIT_COMPLEMENT RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R RAW IN
FUNCTION BIT_OR RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
FUNCTION BIT_XOR RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
舉一個例子,還是以3 和 5 為運算量,這個時候需要用到hextoraw這個函式,這個函式是十六進位制轉換的函式。
所以hextoraw(3)實際是
十六進位制:3
十進位制:3(3)
二進位制:00011
同理,hextoraw(5)的二進位制為101
使用utl_raw得到的情況就是
select utl_raw.bit_and(hextoraw(3),hextoraw(5)) from dual
結果類似於使用bitand的結果 select bitand(3,5) from dual
二進位制的運算都是有一定的實際使用意義的,在後續的博文中繼續分享,歡迎關注。
位運算非常的簡潔,使用起來看起來很高深,很有專業的味道,經常在一些筆試面試題中出現一些位運算的身影。而且個人覺得位運算確實是比較通用和精華的內容。
位運算是二進位制位的運算,c語言提供了位運算的功能,在其它的高階語言(java)中也有實現,還是具有一定的優勢的。
c語言中提供的位運算子有
按位與 & 按位或 | 按位異或 ^
取反 ~ 左移 << 右移 >>
這6種運算子中,除了取反~運算子外,其它的都是二目運算子,就是要求運算子兩側各有一個運算量,運算量是整型或者字元型的資料
先來看看按位與,基本的運算規則就是 0&0=0 ,0&1=0 ,1&0=0,1&1=1 因為是二進位制的運算,我們轉換成二進位制的方式來看就比較清楚了。
以3&5為例。
00000011
00000101 &
---------------
00000001
所以3&5按位與的結果就是1,
明白了這些基本內容,我們如果透過c語言,或者java來簡單測試是沒有問題的,我手頭有oracle的環境,那就用oracle來試試。
oracle中對於按位與是透過bitand來實現的。透過字面理解也很容易區別。
SQL> select bitand(3,5) from dual;
BITAND(3,5)
-----------
1
按位或
按位或的基本運算規則就是 0|0=0, 0|1=1,1|0=1,1|1=1
還是上面相似的例子3|5
00000011
00000101 |
---------------
00000111
所以按位或的結果就是7
當然了在oracle中可沒有直接的函式bitor
但是我們可以透過bitand來得到bitor的結果。
基本的公式就是bitor(x,y)=x+y-bitand(x,y)
所以bitor(3,5)=3+5-bitand(3,5)=8-1=7
按位異或
按位異或有時候也叫XOR運算子,它的運算規則是 0^0=0, 0^1=1, 1^0=1, 1^1=0
還是類似的例子。
3^5
00000011
00000101 ^
---------------
00000110
所以按位異或的結果就是6
在oracle中也沒有按位異或的函式bitxor,但是可以透過bitand來實現。
bitxor(x,y)=bitor(x,y) - bitand(x,y) = (x + y) - BITAND(x, y) * 2
所以bitxor(3,5)=3+5-2*1=6
說到這三種運算子,在oracle中也有它們的身影。
可以在utl_raw中得到,但是不同之處在於型別是raw,需要資料進位制的轉換。
SQL> desc utl_raw
FUNCTION BIT_AND RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
FUNCTION BIT_COMPLEMENT RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R RAW IN
FUNCTION BIT_OR RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
FUNCTION BIT_XOR RETURNS RAW
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
R1 RAW IN
R2 RAW IN
舉一個例子,還是以3 和 5 為運算量,這個時候需要用到hextoraw這個函式,這個函式是十六進位制轉換的函式。
所以hextoraw(3)實際是
十六進位制:3
十進位制:3(3)
二進位制:00011
同理,hextoraw(5)的二進位制為101
使用utl_raw得到的情況就是
select utl_raw.bit_and(hextoraw(3),hextoraw(5)) from dual
結果類似於使用bitand的結果 select bitand(3,5) from dual
二進位制的運算都是有一定的實際使用意義的,在後續的博文中繼續分享,歡迎關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1440273/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學習位運算
- C語言學習筆記——位運算C語言筆記
- 位運算與SQL實現SQL
- 二進位制、位運算、位移運算
- (位運算)兩個字串的位運算字串
- 位運算
- 簡單電路實踐——電路與二進位制運算
- python學習----誰在說謊邏輯運算Python
- 位運算可以實現哪些功能
- 實用的位運算應用
- 位運算實現加減乘除
- 理解位運算
- SQL位運算SQL
- 強化學習在小桔車服使用者運營中的實踐強化學習
- 使用位運算進行加法運算
- 從實踐中學習oracle/sql 1-3章學習OracleSQL
- 在 Google Colab 中快速實踐深度學習Go深度學習
- PHP 位運算使用PHP
- 位運算進階
- 位運算總結
- 巧用JS位運算JS
- 位運算-異或(^)
- 掌握oracle與SQL區別用一加法運算來學習OracleSQL
- 排序學習實踐排序
- android位運算講解與實戰Android
- java二進位制運算十進位制(精確運算)Java
- opencv入門系列教學(六)影像上的算術運算(加法、融合、按位運算)OpenCV
- 運算整數C/C++位運算技巧C++
- 計算機基礎:位運算計算機
- 深度學習在小米電商業務的應用實踐深度學習
- 2,javase程式碼實戰-運算子——位運算實現加密解密 (一)Java加密解密
- ReactNative學習實踐:Navigator實踐React
- 自動化運維工具 SaltStack 在雲端計算環境中的實踐運維
- JS中的位運算JS
- 位運算簡單操作
- Java位運算小節Java
- Java中的位運算Java
- 位運算的應用