一、位(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補最低位 如果移動的位數超過了該型別的最大位數,那麼...