位運算 移位運算子

2021-07-29 08:00:12 字數 1912 閱讀 5879

一、位(bit)運算子:

位運算子 運算子含義

& 與(and)

| 或(or)

^ 異或

~ 取反

規則:

可以把1當做true ,0當做false

只有參與運算的兩位都為1,&運算的結果才為1,否則就為0。

只有參加運算的兩位都是0,| 運算的結果才是0,否則都是1。

只有參加運算的兩位不同,^ 運算的結果才為1,否則就為0。

1、& 與運算

& 參見運算的兩位數都為1,&運算子結果才為1,否則就為0。

6&3

00000000 00000000 00000000 00000110 –>6

00000000 00000000 00000000 00000011 –>3

00000000 00000000 00000000 00000010 & =2

2、| 或運算

| 參與運算的兩位都為0,|運算的結果才為0,否則就為1。

00000000 00000000 00000000 00000110 –>6

00000000 00000000 00000000 00000011 –>3

00000000 00000000 00000000 00000111 | =7

3、^ 異或運算

^只有參加運算的兩位不同,^運算的結果才為1,否則就為0。

00000000 00000000 00000000 00000110 6

00000000 00000000 00000000 00000011 3

00000000 00000000 00000000 00000101 ^ =5

4、~ 反碼

就是取反,二進位制只有1和0,取反就是如果為1,取反就是0,如果是0,取反就是1。

0000-0000 0000-0000 0000-0000 0000-0110 —->6

1111-1111 1111-1111 1111-1111 1111-1001 取反 -7

system.out.println(~6);//-7

結論:當參與取反的數值是正數時,把對應的值加上負號,再-1;

當參與取反的數值是負數時,把對應的值加上負號,再-1;

負數的表現形式就是對應的正數取反,再加1。負數的最高位肯定是1。

5、異或特點

乙個數異或同乙個數兩次,結果還是那個數. 用處乙個簡單的加密思想.

6^3^3

0000-0000 0000-0000 0000-0000 0000-0110 6

0000-0000 0000-0000 0000-0000 0000-0011 ^3

0000-0000 0000-0000 0000-0000 0000-0101

0000-0000 0000-0000 0000-0000 0000-0011 ^3

0000-0000 0000-0000 0000-0000 0000-0110 結果是6

如果要證明的話可以先計算後面兩個相同數字的^,6^(3^3),兩個相同數的異或為0,任何數與0異或為本身

一些用使用位運算的場景:

1、可以是使用&符對乙個二進位制數字進行擷取,使其具有固定的位數

2、對兩個變數的值進行互換

二、移位運算子

<< 左移 左移就相當於乘以2的位移個數次冪.

右移 右移就相當於除以2的位移個數次冪. 使用》 後原來是最高位1 的那麼空出來的最高位還是1 的,是0的還是0。

無符號右移 如果使用》 無論最高位是0還是1 空餘最高位都拿0 補,這就是無符號右移

位運算子 移位運算子

按位操作符用來操作整數基本資料型別中的單個位元 bit 就是二進位制,按位操作符會對兩個引數中對應的位 bit 執行布林運算,最終生成乙個結果。下面我們來看一下都有哪些位運算子。ok,有人看了之後可能會問,與 或 異或這三個符號不是邏輯運算子嗎,怎麼又成了位運算子?其實,我們知道,任何資訊在計算機中...

位運算子和移位運算子

golang中有3個位運算 按位與 按位或 按位異或 按位與 兩位全為1,結果為1,否則為0 按位或 兩位有乙個為1,結果為1,否則為0 按位異或 兩位乙個為0,乙個為1,結果為1,否則為0 例如 2 3 2 2的補碼0000 0010 3的補碼0000 0011 2 3 0000 0010 2 2...

移位運算子

移位運算子不外乎就這三種 左移 帶符號右移 和 無符號右移 1 左移運算子 左移運算子 使指定值的所有位都左移規定的次數。1 它的通用格式如下所示 value num num 指定要移位值value 移動的位數。左移的規則只記住一點 丟棄最高位,0補最低位 如果移動的位數超過了該型別的最大位數,那麼...