(x&y)+((x^y)>>1)能求x與y的平均數,
其原理1如下:
設兩數如下:
x&y取出同為1的位,如下:
00110
由此數一定小於等於原來如何乙個數,由此數加乙個數可以得到原來數,由此將原來的兩數相加變成4數相加,如下:
相當於:
00110乘以2=x&y乘以2
而後兩數相加就是x^y,相當於:
x&y乘以2+x^y
他們除以2就是:x&y+x^y除以2 結果就是x&y+(x^y)>>1
其原理2如下:
(x+y)/2=((x-x&y+y-x&y)+(x&y)*2)/2=((x^y)+(x&y)*2)/2=(x^y)/2+x&y=(x^y)>>1+x&y=x&y+(x^y)>>1
理解x-x&y + y-x&y =x^y就明白了 x&y一定比x或者y小
使用 x y x y 1 求平均數
在乙個面試題裡見到這麼一道題 下面的 int func int x,int y 當 x 為 729,y 為 271 時函式的返回值是多少?思路最簡單也最直接的就是將 x 和 y 都先轉換為二進位制,然後老老實實的做按位與,按位異或等運算,最後得出結果。在分析該表示式的實現思路之前,首先說明該表示式的...
使用 x y x y 1 求平均數
在乙個面試題裡見到這麼一道題 下面的 int func int x,int y 當 x 為 729,y 為 271 時函式的返回值是多少?思路最簡單也最直接的就是將 x 和 y 都先轉換為二進位制,然後老老實實的做按位與,按位異或等運算,最後得出結果。在分析該表示式的實現思路之前,首先說明該表示式的...
x y x y 1 求平均值
x y x y 1 把x和y裡對應的每一位 指二進位制位 都分成 三部分,每一部分 分別計算平均值,最後彙總 其中,第一部分 是x,y對應位都是1,用x y計算其平均值 第二部分 是x,y中對應位有且只有一位是1,用 x y 1計算其平均值 第二部分 是x,y中對應位均為0,無須計算。下圖詳細說明 ...