演算法學習 位運算

2021-10-04 21:36:32 字數 2048 閱讀 1013

判斷奇偶

x & 1 = 1 -> x為奇數

x & 1 = 0 -> x為偶數獲取二進位制x的第n位是0還是1

如果(x & (1 << n)) == 0,則該位為0,否則位11左移表示乘以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 ^ bn個相同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 這道題目我們知道一共就兩種情況,要麼不能合併,要麼可以合併。能合併的情況是前乙個區間的最右邊...