[bit]整数二进制表示中1的个数

摘自《深入理解计算机系统》(中文版,第二版)的习题3.49,64位系统,算法如下:

long fun_c(unsigned long x ) {
  long val = 0;
  int i;
  for ( i = 0; i < 8; i++ ) {
    val += x & 0x0101010101010101L; // 注意:这里是0x表示的
    x >>= 1;
  }

  val += (val >> 32);
  val += (val >> 16);
  val += (val >> 8);
  
  return val & 0xFF;
}
上面这个算法是把1个64位整数的8个字节分别算二进制表示时1的个数(因为1个字节有8个二进制位,所以循环8次),之后将所有的8个表示位数的值相加即可。

BTW: 如果是计算1的个数奇偶性的话,可以直接使用PF标志位。

你可能感兴趣的:(Algorithm,bit)