如何计算long long类型变量中的位数? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何计算long long类型变量中的位数? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我想计算long long类型变量中的位数。例如,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); 

以上是关于如何计算long long类型变量中的位数? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Long 数据类型变量中设置 Optional<Long> 数据类型变量值? [关闭]

关于Java数据类型的位

oracle 如何把long类型转换成字符类型

matlab矩阵--如何控制矩阵中小数点的位数

VB中Integer(整型)和Long(长整型)有啥区别?

C和C++ 变量内存