徹底理解java位操作符

2021-04-23 10:58:39 字數 1600 閱讀 2615

無符號右移位操作符「>>>」在將bit串右移位時,從bit串的最左邊填充0,這和帶符號右移位操作符「>>」不同。「>>」在將bit串右移位時,從bit串的最左邊填充原來最左邊的位。也就是說,bit串原來最左邊的位是符號位,如果為1,則在帶符號右移時最左邊始終填充1;如果為0,則在帶符號右移時最左邊始終填充0。

移位操作符的例子見下表。

操作                       結果                 說明

00110010 << 2      11001000          右邊始終填充0

00110010 >> 2      00001100          結果一樣

00110010 >>> 2    00001100

10110010 >> 2      11101100          結果不同

10110010 >>> 2    00101100

「按位與」操作符「&」對兩個bit串按位進行邏輯與,「按位或」操作符「|」對兩個bit串按位進行邏輯或,「按位異或」操作符「^」對兩個bit串按位進行異或操作。運算規則如下表所示。

按位與       按位或          按位異或

0 & 0 = 0    0 | 0 = 0         0 ^ 0 = 0

0 & 1 = 0    0 | 1 = 1         0 ^ 1 = 1

1 & 0 = 0    1 | 0 = 1         1 ^ 0 = 1

1 & 1 = 1    1 | 1 = 1         1 ^ 1 = 0

/*** 理解操作符的用法

* 這裡重點測試下為操作符的用法* *

* 建立日期 2007-10-26

*/public class test {

/*** @param args

*/public static void main(string args) {

//測試位操作符合

//關於左移位操作符「<<」將乙個bit串向左移位,帶符號右移位操作符「>>」將乙個bit串向右移位。

//左運算元是要移位的bit串,右運算元是要移動的位數。

//最後得出的結果是 左移位操作符「<<」  == 1×2的16次方==65536

plintln(1 << 16);

//最後得出的結果是 右移位操作符「>>」  == 1/2的16次方==0

plintln(1 >> 16);

//按位與」操作符「&」對兩個bit串按位進行邏輯與

plintln(10000 & 255);

//測試0xff,這些都是顏色相關的測試, 這些知識對於j2me 程式設計師來說是很有用處的

// 此處我有一些不明白的地方,為什麼要&0xff來操作呢

//測試顏色值錢,分拆後,等到對於的值,以為沒乙個值都在0~255之間

int red   = (10000 >> 16) & 0xff;

int green = (10000 >> 8)  & 0xff;

int blue  = (10000)  & 0xff;

plintln(red);

plintln(green);

plintln(blue);

理解java位操作符

最近的工作需要大量的採用位操作符的 其實專案本身沒有這樣的需求,不過現在我的職責是維護同事的 而這位同事的偏好是採用位操作,沒辦法學習了。無符號右移位操作符 在將bit串右移位時,從bit串的最左邊填充0,這和帶符號右移位操作符 不同。在將bit串右移位時,從bit串的最左邊填充原來最左邊的位。也就...

java 位操作符

位運算的應用場景 因為位運算的運算效率比直接對數字進行加減乘除高很多,所以當出現以下情景且對運算效率要求較高時,可以考慮使用位運算。情況1 輸入乙個int型的正整數,計算出該int型資料在記憶體中儲存時1的個數。例如輸入5,因為5 的二進位制表示為101,所以輸出為2.解題思路 普通方法是將5轉換成...

java位操作符

無符號右移位操作符 在將bit串右移位時,從bit串的最左邊填充0,這和帶符號右移位操作符 不同。在將bit串右移位時,從bit串的最左邊填充原來最左邊的位。也就是說,bit串原來最左邊的位是符號位,如果為1,則在帶符號右移時最左邊始終填充1 如果為0,則在帶符號右移時最左邊始終填充0。移位操作符的...