位運算實質是將參與運算的數字轉換為二進位制,而後逐位對應進行運算。
按位與運算為:兩位全為1,結果為1,即1&1=1,1&0=0,0&1=0,0&0=0。
例如51 & 5 -> 00110011 & 00000101 = 00000001 -> 51 & 5 = 1
特殊用法:
(1)與0相與可清零。
(2)與1相與可保留原值,可從乙個數中取某些位。例如需要取10101110中的低四位,10101110 & 00001111 = 00001110,即得到所需結果。
兩位只要有一位為1,結果則為1,即1|1=1,1|0=1,0|1=1,0|0=0。
特殊用法:
(1)與0相或可保留原值。
(2)與1相或可將對應位置1。例如,將x=10100000的低四位置1,使x | 00001111 = 10101111即可。
兩位為「異」,即一位為1一位為0,則結果為1,否則為0。即1^1=1,1^0=0,0^1=0,0^0=1。
特殊用法:
(1)使指定位翻**找乙個數,對應x要翻轉的各位為1,其餘為0,使其與x進行異或運算即可。例如,x=10101110,使低四位翻轉,x ^ 00001111 = 10100001。
(2)與0相異或保留原值。例如x ^ 00000000 = 10101110。
(3)交換兩變數的值。(比借助容器法、加減法效率高)原理:乙個數對同乙個數連續兩次進行異或運算,結果與這個數相等。
因此,交換方法為:a = a ^ b,b = a ^ b,a = a ^ b。
將乙個數按位取反,即~ 0 = 1,~ 1 = 0。
將乙個數左移x位,即左邊丟棄x位,右邊用0補x位。例:11100111 << 2 = 10011100。
拓展:若左移時捨棄的高位全為0,則每左移1位,相當於該數十進位制時乘一次2。==原碼==:乙個整數按照絕對值大小轉換為二進位制即為原碼;
==反碼==:將二進位制數按位取反,得到的即為反碼;
==補碼==:反碼加1即為補碼。
==由於計算機底層硬體的限制,負數均使用補碼表示。==
例:11(1011) << 2 = 44(11表示為1011時實際上不完整,若計算機中規定整型的大小為32bit,則11的完整二進位制形式為00000000 00000000 0000000 00001011)
將乙個數右移若干位,右邊捨棄,正數左邊補0,負數左邊補1。每右移一位,相當於除以一次2。
例:4 >> 2 = 1,-14 >> 2 = -4。
將乙個數右移若干位,左邊補0,右邊捨棄。
例:-14 >>> 2 = (11111111 11111111 11111111 11110010) >>> 2 = (00111111 11111111 11111111 11111100) = 1073741820
用途方法
十進位制轉成十六進製制
integer.tohexstring(int i)
十進位制轉成八進位制
integer.tooctalstring(int i)
十進位制轉成二進位制
integer.tobinarystring(int i)
十六進製制轉成十進位制
integer.valueof("ffff", 16).tostring()
八進位制轉成十進位制
integer.valueof("2234", 8).tostring()
二進位制轉成十進位制
integer.valueof("0110", 2).tostring()
二進位制運算基礎
位運算實質是將參與運算的數字轉換為二進位制,而後逐位對應進行運算。按位與運算為 兩位全為1,結果為1,即1 1 1,1 0 0,0 1 0,0 0 0。例如51 5 00110011 00000101 00000001 51 5 1 特殊用法 1 與0相與可清零。2 與1相與可保留原值,可從乙個數中...
二進位制運算基礎
1 十六進製制的表示 例子 0xaa 0x55。將十六進製制表示進行二進位制運算,首先要把十六進製制表示成二進位制。規則是,兩個十六進製制位等於乙個位元組 8個二進位制位 其實就是乙個十六進製制位佔4個二進位制位。對於0xaa中的a為十進位制中的10,用二進位制表示就是1010,所以0xaa用二進位...
二進位制運算
運算子 符號含義例子與 兩邊都為真時為真 1 1 1或 任何一邊為真時為真1 非取反 如果1則為0 如果0為1 1 0 異或 兩邊相同為1 兩邊不同為0 1 1返回false 1 2返回true 運算子符號含義 例子邏輯與 判斷兩邊 都為真時為真 true true true或 判斷兩邊 任何一邊為...