&(按位與):如果兩個相應的二進位制位都為1,則結果為1,否則結果為0。
|(按位或):兩個相應的二進位制位中只要有乙個為1,則結果為1,否則結果為0。
^(按位異或):若參加運算的兩個二進位制位值相同,則結果為0,否則結果為1。
~(取反):對乙個二進位制數按位取反,即將0變為1,將1變為0。
<<(左移):用來將乙個數的各二進位制位全部左移n位,右邊補0。
>>(右移):用來將乙個數的各二進位制位全部右移n位,移到右邊的低位捨棄,對於無符號的數,高位補0;對於有符號的數,如果原符號位(即最高位)為1,則高位補1,如果原符號位為0,則高位補0。
判斷奇偶數
如果把n以二進位制的形式展示的話,判斷奇偶數隻需要判斷最後乙個二進位制位是0還是1就可以了,如果是1則為奇數,否則為偶數。
int n =5;
if((n &1)
==1)
交換兩個數的值
由上述^運算的定義可知,x^x=0,xyz=xzy,n^0=n,則可據此在不使用輔助變數的前提下交換兩個數的值。
int x =5;
int y =9;
x = x ^ y;
//y=(x^y)^y=x^(y^y)=x^0=x;
y = x ^ y;
//x=(x^y)^x=(x^x)^y=0^y=y;
x = x ^ y;
system.out.
println
("x="
+ x +
";y="
+ y)
;//輸出結果:x=9;y=5
找出沒有重複的數
適用場景:給出一組整數,其中乙個數隻出現了一次,其他的數都出現了兩次,讓找出這個只出現了一次的數。
由上述運算的定義可知,xx=0,xyz=xzy,n0=n,則將所有的數一起做,出現了兩次的數都會被消掉。
int
arr =
;int tmp = arr[0]
;for
(int i =
1; i < arr.length; i++
) system.out.
println
(tmp)
;//輸出結果:5
m的n次方
根據&1和》1的性質,我們可以逐位讀取n,例如13的二進位制1101=1000+0100+0001=2³+2²+2º。
/**
* @description: 測試類
* @author: murphy
* @date: 2020/7/37:44 上午
*/public
class
demo
/** * 計算m的n次方的值
* @author murphy
* @date 2020/7/10-12:10 上午
* @param m
* @param n
* @return int
*/public
static
intpow
(int m,
int n)
tmp *= tmp;
n = n >>1;
}return sum;
}}
使用二進位制進行子集列舉
乙個元素個數為n的集合,子集有2的n次方個;在二進位制中,如果用二進位制的第i位是1還是0來表示集合的第i位元素取還是不取,那麼n個二進位制位共有2的n次方種組合方式,且這些組合方式恰好是0到n的2次方減1的二進位制的值。因此,可以根據這種性質用二進位制進行子集列舉,大致思路如下:
arr=
;000→
;001→
;010→
;011→
;100→
;101→
;110→
;111→
;
實現**如下:
/**
* @description: 測試類
* @author: murphy
* @date: 2020/7/37:44 上午
*/public
class
demo
/** * 計算m的n次方的值
* @author murphy
* @date 2020/7/10-12:10 上午
* @param m
* @param n
* @return int
*/public
static
intpow
(int m,
int n)
tmp *= tmp;
n = n >>1;
}return sum;
}/**
* 列出集合arraylist的所有子集並輸出
* @author murphy
* @date 2020/7/10-1:12 上午
* @param arraylist
* @return void
*/public
static
void
enumeration
(arraylist
arraylist)
initial = initial >>1;
a +=1;
} system.out.
println
(arr)
; initial +=1;
}}}
位運算基礎知識
位運算子主要針對二進位制,它包括了 與 非 或 異或 從表面上看似乎有點像邏輯運算子,但邏輯運算子是針對兩個關係運算子來進行邏輯運算,而位運算子主要針對兩個二進位制數的位進行邏輯運算。下面詳細介紹每個位運算子。1 與運算子 與運算子用符號 表示,其使用規律如下 兩個運算元中位都為1,結果才為1,否則...
位運算的基礎知識
位運算常見符號 我只會這麼多 舉例均為二進位制 與運算子 兩位同時為 1 結果才為 1 否則為0 例 1 0 0 0 0 0 1 1 1 110 111 110 或運算子 參加運算的兩個物件只要有乙個為1,其值為1 例 1 1 1 1 0 1 0 0 0 110 111 111 異或 同為0,異為1...
位運算知識整理
位運算操作符 位邏輯非運算 位邏輯與運算 位邏輯或運算 位邏輯異或運算 位左移運算 位右移運算using system using system.collections.generic using system.linq using system.text namespace 集合 renum 如果...