恭喜,你发布的帖子
发布于 2020-11-16 21:02:35
7楼
这个问题据说是华为还是哪个公司的面试题,
m是一个32位整数;
奇数位右移1, 和 偶数位的值相加, 得到每两位的1的个数的分布;
m = (m & 0xAAAAAAAA) >> 1+ (m & 0x55555555);
按每两位分组, 奇数组右移2, 和 偶数组的值相加, 得到每四位1的分布;
m = (m & 0x CCCCCCCC) >> 2 + (m & 0x33333333);
按每四位分组, 奇数组右移4, 和偶数组相加, 得到每8为位1的分布;
m = (m & F0F0F0F)) >> 4 + (m & 0x0F0F0F0F0F);
4.每8??位 分组, 奇数组右移动8, 和偶数组相加, 得到每16位1的分布
m = m ( & FF00FF00) >> 8 + (m & 0x00FF00FF);
5.
m的高低字相加, 就是m的1的个数;
请填写推广理由:
分享
只看
楼主