面試題之位運算的巧妙應用

2022-08-31 02:51:10 字數 539 閱讀 5235

1、判斷乙個數是否是2的n次方

題目要求:用乙個表示式,判斷乙個數x是否是2的n次方,即2,4,8,16……等,要求不可以用迴圈語句。

解析:2,4,8,16這樣的數轉化成二進位制是10,100,1000,10000。

如果x減去1後(低一位並且二進位制的每一位都是1),這個數與x做與運算,答案若是0,則x是2的n次方。

2、兩個數的交換

題目要求:將a,b兩個數的值進行交換,並且不使用任何的中間變數。

解法1:

a = a+b;

b = a-b;

a = a-b;

解法2:採用異或位運算。

異或運算:相同為0,相異為1。

a = a^b;//a變為乙個相同為0,相異為1的結果

b = a^b;//該結果和b做運算,得到原來的a

a = a^b;//該結果和a做運算,得到原來的b

位運算的巧妙應用

與運算 或運算 異或運算 非運算 移位運算 和 題目要求 用乙個表示式,判斷乙個數x是否是2的n次方,即2,4,8,16 等,要求不可以用迴圈語句。解析 2,4,8,16這樣的數轉化成二進位制是10,100,1000,10000。如果x減去1後 低一位並且二進位制的每一位都是1 這個數與x做與運算,...

位運算面試題總結

題目鏈結 題目描述 給出兩個32位的整數n和m,以及兩個二進位制位的位置i和j。寫乙個方法來使得n中的第i到j位等於m m會是n中從第i為開始到第j位的子串 樣例n 10000000000 2,m 10101 2,i 2,j 6 返回n 10001010100 2class solution els...

位運算常見面試題

思路 兩個相同數異或結果為0 int a a b int b a b int a a b 思路 兩個相同數異或結果為0,讓陣列中所有的數字相異或,留下的結果即為出現 次的數字 int find one time number vector data return result 思路 兩個相同數異或結...