欢迎光临散文网 会员登陆 & 注册

1.求解整形数的二进制表示中的1的个数

2023-08-22 11:21 作者:踏星赴梦  | 我要投稿
  1. 代码如下:

2.算法核心:

  • x = x &(x - 1);

  • 不断清除数 x 的二进制表示中最右边的 1 ,同时累加计数器,直到 x = 0

3.算法解释:为什么 x = x &(x - 1) 就可以清除掉最右边的 1 呢?

    • 因为从二进制的角度讲,x 相当于在 x - 1 的最低位加了一个 1 ,

    • eg1

       8(1000)= 7(0111)+ 1(0001)
       8 & 7 = (1000)&(0111)= 0(0000)
       /* 清除了8最右边的1,即最高位的1,因为8只有一个1 */

    • eg2

       7(0111)= 6(0110)+ 1(0001)
       7 & 6 = (0111)&(0110)= 6(0110)
       /* 清除掉了7最右边的一个1 */
       6(0110) = 5(0101) + 1(0001)
       6 & 5 = 6(0110) & 5(0101) = 4(0100)
       /* 同理 */
       4(0100) = 3(0011) + 1(0001)
       4 & 3 = 4(0100) & 3(0011) = 0(0000)


作为记录,方便学习。

1.求解整形数的二进制表示中的1的个数的评论 (共 条)

分享到微博请遵守国家法律