求平均數 x y x y 1 原理

2021-06-19 02:57:22 字數 435 閱讀 7435

(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,無須計算。下圖詳細說明 ...