如何计算长长类型变量中的位数

How to count the number of the bits in the long long type variables?

本文关键字:类型变量 何计算 计算      更新时间:2023-10-16

我想计算长长类型变量中的位数。例如1100011001 -> 5

在整数类型中,我可以使用

a = (a & 0x5555) + ((a & 0xAAAA) >> 1); 
a = (a & 0x3333) + ((a & 0xCCCC) >> 2); 
a = (a & 0x0F0F) + ((a & 0xF0F0) >> 4); 
a = (a & 0x00FF) + ((a & 0xFF00) >> 8); 

但是在"长长"的情况下,该怎么做呢?

您的代码适用于 16 位整数。

要使其适用于 32 位整数,您需要:

  • 使其中的每个文字宽两倍(同时保留模式(,
  • 再添加一行代码。

结果如下:

a = (a & 0x55555555) + ((a & 0xAAAAAAAA) >> 1); 
a = (a & 0x33333333) + ((a & 0xCCCCCCCC) >> 2); 
a = (a & 0x0F0F0F0F) + ((a & 0xF0F0F0F0) >> 4); 
a = (a & 0x00FF00FF) + ((a & 0xFF00FF00) >> 8); 
a = (a & 0x0000FFFF) + ((a & 0xFFFF0000) >> 16); 

然后,若要使其适用于 64 位整数,请重复相同的过程:

a = (a & 0x5555555555555555) + ((a & 0xAAAAAAAAAAAAAAAA) >> 1); 
...
a = (a & 0x0000FFFF0000FFFF) + ((a & 0xFFFF0000FFFF0000) >> 16); 
a = (a & 0x00000000FFFFFFFF) + ((a & 0xFFFFFFFF00000000) >> 32);