5分鐘了解位運算

2021-10-09 03:05:32 字數 1892 閱讀 6804

運算子分為6種,它們是

名稱符號

按位與&

按位或|

按位異或

^按位取反

~左移運算

<<

右移運算

>>

按位與運算將參與運算的兩數對應的二進位制位相與,當對應的二進位制位均為 1 時,結果位為 1,否則結果位為 0。按位與運算的運算子為 &,參與運算的數以補碼方式出現。舉個例子,將數字 5 和數字 8 進行按位與運算,其實是將數字 5 對應的二進位制 0000 0101 和數字 8 對應的二進位制 0000 1000 進行按位與運算,即:

0000

0101

&0000

1000

----

----

0000

0000

按位或運算將參與運算的兩數對應的二進位制位相或,只要對應的二進位制位中有 1,結果位為 1,否則結果位為 0。按位或運算的運算子為 |,參與運算的數以補碼方式出現。舉個例子,將數字 3 和數字 7 進行按位或運算,其實是將數字 3 對應的二進位制 0000 0011和數字 7 對應的二進位制 0000 0111 進行按位或運算,即:

0000

0011

|0000

0111

----

----

0000

0111

按位異或運算將參與運算的兩數對應的二進位制位相異或,當對應的二進位制位值不同時,結果位為 1,否則結果位為 0。按位異或的運算子為 ^,參與運算的數以補碼方式出現。舉個例子,將數字 12 和數字 7 進行按位異或運算,其實是將數字 12 對應的二進位制 0000 1100 和數字 7 對應的二進位制 0000 0111 進行按位異或運算,即:

0000

1100

^0000

0111

----

----

0000

1011

按位取反運算將二進位制數的每乙個位上面的 0 換成 1,1 換成 0。按位取反的運算子為 ~,參與運算的數以補碼方式出現。舉個例子,對數字 9 進行按位取反運算,其實是將數字 9 對應的二進位制 0000 1001 進行按位取反運算,即:

~0000

1001

=0000

1001 # 補碼,正數補碼即原碼

=1111

1010 # 取反=-

10

其中包含著乙個規律,可以用數學公式表示

~x = -(x+1)

左移運算將數對應的二進位全部向左移動若干位,高位丟棄,低位補 0。左移運算的運算子為 <<。舉個例子,將數字 5 左移 4 位,其實是將數字 5 對應的二進位制 0000 0101 中的二進位向左移動 4 位,即:

5

<<4=

0000

0101

<<4=

0101

0000 # 高位丟棄,低位補 0

=80

左移運算的規律為

x << n = x(2)^n

右移運算將數對應的二進位全部向右移動若干位。對於左邊的空位,如果是正數則補 0,負數可能補 0 或 1 (turbo c 和很多編譯器選擇補 1)。右移運算的運算子為 >>。舉個例子,將數字 80 右移 4 位,其實是將數字 80 對應的二進位制 0101 0000 中的二進位向右移動 4 位,即:

80

>>4=

0101

0000

>>4=

0000

0101 # 正數補0,負數補1

=5

右移運算的規律為

x >> n = x / (2)^n

要注意的是,不能整除時,取整數。

5分鐘了解docker

一 概念 開源的應用容器引擎,打包開發者的應用及依賴包在乙個可移植的容器中,相當於沙箱。docker允許開發人員在單個作業系統上隔離和執行多個應用程式,而不是為伺服器上的每個應用程式專用乙個虛擬機器。這是通過將應用程式隔離在單獨的容器中來實現的,這些應用程式雖然被容器分隔開,但是卻可以共享作業系統和...

5分鐘了解MariaDB建立角色功能

part1 grant role?建立角色,oracle很早就支援建立角色的功能了,而版本依然尚不支援。目前,只有 版本裡支援建立角色這項功能。part2 為什麼我們需要角色 1.在實際工作中,有大量的使用者其許可權是一樣的,比如唯讀許可權。如果每次在建立完使用者後,dba再去對每個使用者去分別授權...

5分鐘了解折半插入排序

5分鐘了解折半插入排序 前言折半插入排序 binary insertion sort 是對直接插入排序演算法的一種改進。插入排序思想介紹 折半插入排序與直接插入排序演算法原理相同。只是,在向已排序的資料中插入資料時,採用來折半查詢 二分查詢 先取已經排序的序列的中間元素,與待插入的資料進行比較,如果...