由於在平時寫**時,不經常使用位操作符,然而,在看jdk的原始碼中,經常會遇到位操作符。為了避免每次都要去網上或者書上查一下位操作符的用法,特此,寫了這篇文章,用以備忘。
現在,言歸正傳。
按位與操作符(&)
如果兩個輸入位為1,則結果位也是1,否則,結果位為0。
int x = 12
; int y = 13
; int z1 = x&y
; system.out
.println(integer.tobinarystring(x));
system.out
.println(integer.tobinarystring(y));
system.out
.println(integer.tobinarystring(z1));
輸出結果為:
1100按位或操作符(|)1101
1100
如果兩個輸入位為0,則結果位為0,否則,結果位為1。
int x = 12
; int y = 13
; int z2 = x|y
; system.out
.println(integer.tobinarystring(x));
system.out
.println(integer.tobinarystring(y));
system.out
.println(integer.tobinarystring(z2));
輸出結果為:
1100按位異或操作符(^)1101
1101
如果兩個輸入位為1,那麼結果位為0;如果兩個輸入位為0,那麼結果位為0,否則,結果位為1。
int x = 12
; int y = 13
; int z3 = x^y
; system.out
.println(integer.tobinarystring(x));
system.out
.println(integer.tobinarystring(y));
system.out
.println(integer.tobinarystring(z3));
輸出結果為:
1100按位非操作符(~)1101
1
按位取反。
int x = 12
; int y = 13
; int z4 = ~x
; system.out
.println(integer.tobinarystring(x));
system.out
.println(integer.tobinarystring(z4));
輸出結果為:
1100移位操作符11111111111111111111111111110011
移位操作符只可用來處理整數型別。
左移(<<)
按照操作符右側指定的位數向左移動,在低位補0。
int x = 12
; int y = 13
; int z5 = x
<<2
; system.out
.println(integer.tobinarystring(x));
system.out
.println(integer.tobinarystring(z5));
輸出結果為:
1100有符號數右移(>>)110000
有符號數右移位操作符使用「符號擴充套件」:若符號為正,則在高位插入0;若符號為負,則在高位插入1。
int x = 12
; int y = -13
; int z6 = x>>2
; int z7 = y>>2
; system.out
.println("x = "+integer.tobinarystring(x));
system.out
.println("x>>2 = "+integer.tobinarystring(z6));
system.out
.println("y = "+integer.tobinarystring(y));
system.out
.println("y>>2 = "+integer.tobinarystring(z7));
輸出結果為:
x = 1100無符號右移(>>>)x>>2 = 11
y = 11111111111111111111111111110011
y>>2 = 11111111111111111111111111111100
無符號右移位操作符使用「0擴充套件」:無論正負,都在高位插入0。
int x = 12
; int y = -13
; int z8 = x>>>2
; int z9 = y>>>2
; system.out
.println("x = "+integer.tobinarystring(x));
system.out
.println("x>>>2 = "+integer.tobinarystring(z8));
system.out
.println("y = "+integer.tobinarystring(y));
system.out
.println("y>>>2 = "+integer.tobinarystring(z9));
輸出結果為:
x = 1100x>>>2 = 11
y = 11111111111111111111111111110011
y>>>2 = 111111111111111111111111111100
java 位操作符
位運算的應用場景 因為位運算的運算效率比直接對數字進行加減乘除高很多,所以當出現以下情景且對運算效率要求較高時,可以考慮使用位運算。情況1 輸入乙個int型的正整數,計算出該int型資料在記憶體中儲存時1的個數。例如輸入5,因為5 的二進位制表示為101,所以輸出為2.解題思路 普通方法是將5轉換成...
java位操作符
無符號右移位操作符 在將bit串右移位時,從bit串的最左邊填充0,這和帶符號右移位操作符 不同。在將bit串右移位時,從bit串的最左邊填充原來最左邊的位。也就是說,bit串原來最左邊的位是符號位,如果為1,則在帶符號右移時最左邊始終填充1 如果為0,則在帶符號右移時最左邊始終填充0。移位操作符的...
理解java位操作符
最近的工作需要大量的採用位操作符的 其實專案本身沒有這樣的需求,不過現在我的職責是維護同事的 而這位同事的偏好是採用位操作,沒辦法學習了。無符號右移位操作符 在將bit串右移位時,從bit串的最左邊填充0,這和帶符號右移位操作符 不同。在將bit串右移位時,從bit串的最左邊填充原來最左邊的位。也就...