這篇文章為大家介紹了java二進位操作技巧,包括移位、位元運算操作符等相關知識點,非常不錯,有興趣的朋友參考下吧
移位
位元運算中大多數操作都是向左移位和向右移位。在Java中,這對應著<<和>>這兩個運算符,範例如下:
/* 00000001 << 1 = 00000010 */ 1 << 1 == 2 /* 00000001 << 3 = 00001000 */ 1 << 3 == 8 /* 11111111 11111111 11111111 11110000 >> 4 = 11111111 11111111 11111111 11111111 */ 0xFFFFFFF0 >> 4 == 0xFFFFFFFF /* 00001111 11111111 11111111 11111111 >> 4 = 00000000 11111111 11111111 11111111 */ 0x0FFFFFFF >> 4 == 0x00FFFFFF
注意:向右移位是有符號運算子。和許多語言一樣,Java使用最高位元來表示數值的正負,負數的最高位元永遠是1。一個以1開頭的二進制數移位後還將以1開頭,一個以0開頭的二進制樹移位後還將以0開頭。所以要小心:Java是可以在整數中進行位元運算的。
你可以使用叫作「無符號右移」運算子的第三個運算子:>>> 來實現以「0」填充的移位,這種移位會忽略符號位並總是用「0」來填滿。
/* 10000000 00000000 00000000 00000000 >>> 1 = 01000000 00000000 00000000 00000000 */ 0x80000000 >>> 1 == 0x40000000 /* 10000000 00000000 00000000 00000000 >> 1 = 11000000 00000000 00000000 00000000 */ 0x80000000 >> 1 == 0xC0000000
最大的用途之一是快速求2的冪。 1向左移位1位是2,移2位是4,移3位是8… 相似的,向右移1位相當於是把該數除以2。
另一個用途是建立遮罩。位元遮罩可用於屏蔽或修改一個二進制數中的某些指定位,下一部分會進行詳細講解。假如我們想要創建一個
00001000的掩碼,程式碼十分簡單:
int bitmask = 1 << 3;
你可以使用位元運算運算元來建立更複雜的掩碼,下一部分同樣會講解位元運算操作符。
位元運算運算子
以下是Java中四個常見的位元運算子:
# ~ – 按位取反
& – 位元與
~ – 位元異或
| – 位元或
簡單應用如下(簡單起見,只顯示二進位)
##
1010 & 0101 == 0000 1100 & 0110 == 0100 1010 | 0101 == 1111 1100 | 0110 == 1110 ~1111 == 0000 ~0011 == 1100 1010 ^ 0101 == 1111 1100 ^ 0110 == 1010
10000001 | 00100000 = 10100001 /* 第五位设为1 */ 10000001 | 1 << 5 = 10100001 /* 同样作用 */ 00000000 | 1 << 2 | 1 << 5 = 00100100
01010101 & ~(1<<2) == 01010101 & 11111011 == 01010001
假設最高位元在左邊:
10010110 ^ ^ | |------- 第 0 位 | |-------------- 第 7 位
注意,第0位元的值是2^0,第一位是2^1,…,第7位的值是2^7。
使用ParseInt
#########在你的程式碼裡操作二進位數字的便利方法是使用Integer.parseInt()方法。 Integer.parseInt(“101″,2)代表著把二進位數101轉換為十進位數(5)。這意味著,利用這個方法你甚至可以在###for循環###裡使用二進位數字:###/* 从5到15的循环 */ for (int b = Integer.parseInt("0101",2); b <= Integer.parseInt("1111",2); b++) { /* 做些什么 */ }
char code[8]; int codelen[8]; code[0] = 'a'; codelen[0] = 1; code[1] = 'a'; codelen[1] = 1; code[2] = 'a'; codelen[2] = 1; code[3] = 'a'; codelen[3] = 1; code[4] = 'b'; codelen[4] = 3; code[5] = 'c'; codelen[5] = 3; code[6] = 'd'; codelen[6] = 3; code[7] = 'e'; codelen[7] = 3;
以上是詳解Java二進位操作(動力節點整理)的詳細內容。更多資訊請關注PHP中文網其他相關文章!