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 思路 兩個相同數異或結...