x y x y 1 求平均值

2021-07-09 22:16:57 字數 686 閱讀 7942

(x&y)+((x^y)>>1),把x和y裡對應的每一位(指二進位制位)都分成

三部分,

每一部分

分別計算平均值,最後彙總

。其中,

第一部分

是x,y對應位都是1,用x&y計算其平均值;

第二部分

是x,y中對應位有且只有一位是1,用(x^y)>>1計算其平均值;

第二部分

是x,y中對應位均為0,無須計算。下圖詳細說明:

第一部分,x,y對應位均為1,相加後再除以2還是原來的數,如兩個00001111相加後除以2仍得00001111。

第二部分,對應位有且只有一位為1,用「異或」運算提取出來,然後》1(右移一位,相當於除以2),即到到第二部分的平均值。第三部分,對應位均為零,因為相加後再除以二還是0,所以不用計算。三部分彙總之後就是(x&y)+((x^y)>>1)順便解釋一下前面說到可以避免溢位。假設x,y均為unsigned char型資料(0~255,占用一位元組),顯然,x,y的平均數也在0~255之間,但如果直接x+y可能會使結果大於255,這就產生溢位,雖然最終結果在255之內,但過程中需要額外處理溢位的那一位,在彙編中就需要考慮這種高位溢位的情況,如果(x&y)+((x^y)>>1)計算則不會。

求平均數 x y x y 1 原理

x y x y 1 能求x與y的平均數,其原理1如下 設兩數如下 x y取出同為1的位,如下 00110 由此數一定小於等於原來如何乙個數,由此數加乙個數可以得到原來數,由此將原來的兩數相加變成4數相加,如下 相當於 00110乘以2 x y乘以2 而後兩數相加就是x y,相當於 x y乘以2 x ...

使用 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 都先轉換為二進位制,然後老老實實的做按位與,按位異或等運算,最後得出結果。在分析該表示式的實現思路之前,首先說明該表示式的...