一、位運算符簡介:
1.按位與&。如果兩個整形數據 a、b 對應位都是1,則結果位才為1,否則為0,(int 最大值0x7fffffff ):
1 int a = 0x7fffffff;2 int b = 12;3 int c = 0;4 int aAndB = a&b; //aAndB is 12
5 int aAndC = a&c; //aAndC is 0
2.按位或|。如果兩個操作數都是0,則結果為0,否則為1:
1 int a = 0x7fffffff;2 int b = 12;3 int c = 0;4 int aOrB = a|b; //aOrB is 2147483647
5 int aOrC = a|c; //aOrC is 2147483647
3.按位取反~。當操作數的二進制表示相同時,1位為0,0位為1:
1 int a = 0x7fffffff;2 int b = 12;3 int c = 0;4 a = ~a; //result is -2147483648
5 b = ~b; //result is -13;
6 c = ~c; //result is -1;
4.按位異或^。當兩個操作位二進制表示相同時結果為0,否則為1:
1 int a = 0x7fffffff;2 int b = 12;3 int c = 0;4 c ^= a; //c is 2147483647
5 b ^= 8; //b is 4
6 a ^= a; //a is 0
5.左移<
1 int a = 0x7fffffff;2 int c = 3;3 c <<= 1; //c is 6
4 a <<= 1; //a is -2
6.右移>>。跟左移不同,如果最高位為0,則右移補0。如果最高位為1,則右移補1:
1 int a = 0x7fffffff;2 int a = 0x7fffffff;3 int b = 0;4 int c = 3;5 int d = -2;6 int e = -1;7 c >>= 1; //c is 1
8 a >>= 1; //a is 1073741823
9 b >>= 1; //b is 0
10 d >>= 1; //d is -1
11 e >>=1; //d is -1
7.無符號右移>>>。無論最高位是0還是1,左側被移空的高位都填入0。
二、利用按位運算符,在很多情況下,可以進行方便的計算。
將大寫字母變為小寫,將小寫字母變為大寫( charArray[i]^= 32, 因為在ASCII碼中,大寫字母與小寫字母差了32,因此使用異或運算符,通過與 0 相異或,原字符的二進制形式在其他位保留原有的值,在第 6 位相異或,如果原有位為 0 則變為 1, 原有位為 1 則變為 0):
1 String tempString ="1a2b3E5F6P7p";2 char [] charArray =tempString.toCharArray();3 for(int i = 0; i < charArray.length; i++)4 if(Character.isLetter(charArray[i])) charArray[i] ^= 32;5 System.out.println(String.valueOf(charArray)); //result is 1A2B3e5f6p7P