先說一下布林值的與、或、異或、反運算:
與運算,兩者都為真計算結果為真,反之為假:
1 & 1 = 1,1 & 0 = 0,0 & 1 = 0,0 & 0 = 0;
或運算,至少其一都為真計算結果為真,反之為假:
1 | 1 = 1,1 | 0 = 1,0 | 1 = 1,0 | 0 = 0;
異或運算,兩者不同為真,反之為假:
1 ^ 1 = 0,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0;
取反運算,單目運算子:
~1 = 0,~0 = 1;
以上例子 1 代表真,0 代表假。
按位運算就是將二進位制位的每一位進行如上計算。
如 2 | 5,轉換為二進位制(以 1 位元組 8 位為例):
00000010 | 00000101,每個二進位制位分別進行或運算後得:
00000111 即 7。雖然 7 = 5 + 2 但不代表 2 | 5 = 2 + 5。
如:2 | 6 = 6,5 | 6 = 7,2 | 4 | 5 | 6 | 7 = 7。
同理,按位與運算 2 & 5 的結果為 0:
00000010 & 00000101 = 00000000
按位與運算 2 & 6 的結果為 2(二進位制 00000010):
00000010 & 00000110 = 00000010。
同樣也能算出 2 ^ 6 的結果為 4(二進位制 00000101):
00000010 ^ 00000110 = 00000100。
取反運算 ~00000110 = 11111001。
當然,對一個數字進行取反運算結果是多少,還與該型別是有符號還是無符號,佔用的位元組大小等有關。上面的例子只是以一個位元組為例進行說明。
先說一下布林值的與、或、異或、反運算:
與運算,兩者都為真計算結果為真,反之為假:
1 & 1 = 1,1 & 0 = 0,0 & 1 = 0,0 & 0 = 0;
或運算,至少其一都為真計算結果為真,反之為假:
1 | 1 = 1,1 | 0 = 1,0 | 1 = 1,0 | 0 = 0;
異或運算,兩者不同為真,反之為假:
1 ^ 1 = 0,1 ^ 0 = 1,0 ^ 1 = 1,0 ^ 0 = 0;
取反運算,單目運算子:
~1 = 0,~0 = 1;
以上例子 1 代表真,0 代表假。
按位運算就是將二進位制位的每一位進行如上計算。
如 2 | 5,轉換為二進位制(以 1 位元組 8 位為例):
00000010 | 00000101,每個二進位制位分別進行或運算後得:
00000111 即 7。雖然 7 = 5 + 2 但不代表 2 | 5 = 2 + 5。
如:2 | 6 = 6,5 | 6 = 7,2 | 4 | 5 | 6 | 7 = 7。
同理,按位與運算 2 & 5 的結果為 0:
00000010 & 00000101 = 00000000
按位與運算 2 & 6 的結果為 2(二進位制 00000010):
00000010 & 00000110 = 00000010。
同樣也能算出 2 ^ 6 的結果為 4(二進位制 00000101):
00000010 ^ 00000110 = 00000100。
取反運算 ~00000110 = 11111001。
當然,對一個數字進行取反運算結果是多少,還與該型別是有符號還是無符號,佔用的位元組大小等有關。上面的例子只是以一個位元組為例進行說明。