int avg(int x, int y)
{
return (x & y) + ((x ^ y) >> 1);
}
解释:X+Y= (X^Y)+((X&Y)<<1); 想想加法手动怎么加的!(X&Y)<<1其实就是进位。
SO: (X+Y)/2==((X^Y)>>1)+(X&Y)
int avg(int x, int y)
{
return (x & y) + ((x ^ y) >> 1);
}
解释:X+Y= (X^Y)+((X&Y)<<1); 想想加法手动怎么加的!(X&Y)<<1其实就是进位。
SO: (X+Y)/2==((X^Y)>>1)+(X&Y)