int avg=(x&y) +((x^y)>>1);
x&y 取出x和y二进制都为‘1’的所有位
x^y x和y中有一个为‘1’的所有位
(x^y)>>1 除以2
就是把x和y都分成两部分,
一部分是都为‘1’的部分,因为相同,所以直接加就行了
一部分是x为‘1’,y为‘0’的部分,以及y为’1‘,x为’0‘的部分,两部分加起来除以2,然后跟前面的相加就可以了
位运算求2个整数的平均值原理
最新推荐文章于 2021-05-21 09:07:09 发布
int avg=(x&y) +((x^y)>>1);
x&y 取出x和y二进制都为‘1’的所有位
x^y x和y中有一个为‘1’的所有位
(x^y)>>1 除以2
就是把x和y都分成两部分,
一部分是都为‘1’的部分,因为相同,所以直接加就行了
一部分是x为‘1’,y为‘0’的部分,以及y为’1‘,x为’0‘的部分,两部分加起来除以2,然后跟前面的相加就可以了