判斷奇偶
x & 1 = 1 -> x為奇數
x & 1 = 0 -> x為偶數
獲取二進位制x的第n位是0還是1
如果(x & (1 << n)) == 0,則該位為0,否則位1
1左移表示乘以2,1右移表示除以2
2^n = 1 << n
1/(2^n) = 1 >> n
使用異或運算可以消除重複
a ^ a = 0
a ^ 0 = a
a ^ b ^ a = b
消除二進位制的最後乙個1
x & (x-1)
交換2個數(不使用額外空間)
a = a ^ b
b = a ^ b
a = a ^ b
n個相同n進製的數不進製相加,結果為0
二進位制下 111 + 111 = 0
三進製下 121 + 121 = 0
求兩個數的中間值(a < b)
mid = a + ((b-a) >> 1)
找出乙個陣列中唯一的重複數
/*
假設有11個數,其中1-10各乙個,其中有乙個數有2個,找出這個數;
根據性質1^2^2^3^1^2^3 = 2
*/public
static
void
main
(string[
] args)
;int num =0;
for(
int i =
0; i < arr.length; i++
)for
(int i =
1; i < arr.length; i++
) system.out.
println
(num)
;}
數二進位制中1的個數
//根據x&(x-1)可以消除最後乙個1,消除到x=0的次數
public
static
void
main
(string[
] args)
system.out.
println
(count)
;}
判斷乙個數是不是2的次方
//由於2^n的二進位制中只有1個1,所以x&(x-1)=0
public
static
void
main
(string[
] args)
else
}
二進位制數中0和1互換
/*
1.乙個數與0101...0101(0xaaaaaaaa)做與運算,保留奇數字,偶數字全為0;將得到的數左移
2.乙個數與1010...1010(0x55555555)做與運算,保留偶數字,奇數字全為0;將得到的數右移
3.將左右移後的數異或即得到結果
*/public
static
void
main
(string[
] args)
0-1之間浮點實數的二進位制表示
//將乙個double數轉成二進位制表示,如果小數點後32位無法表示,則返回error
public
static
void
main
(string[
] args)
else
if(stringbuilder.
length()
>34)
} system.out.
println
(stringbuilder.
tostring()
);}
演算法學習 一 位運算練習
案例 輸入一串陣列並賦值,賦值的範圍為1 arr.length 1,然後生成乙個隨機數 1 arr.length 1 將生成的隨機數放在arr arr.length 1 生成乙個隨機位置,將陣列最後一位和生成的隨機位置所在的陣列交換,最後找出重複的那個陣列。public class findrepe...
演算法 位運算
public static intpowern int m,int n return m public static void main string args public static boolean ispower int n return false num如何使2的n次冪,那麼num nu...
社群分享 演算法學習心得 N皇后位運算講解
寫注釋並不是每一行都寫上一些注釋,而是在關鍵的地方你要把注釋寫的很明白,讓你以後複習的時候,可以很快的理清思路。下面以兩道題目為例。for int i 0 i intervals.length i else 這道題目我們知道一共就兩種情況,要麼不能合併,要麼可以合併。能合併的情況是前乙個區間的最右邊...