如何计算长长类型变量中的位数
How to count the number of the bits in the long long type variables?
我想计算长长类型变量中的位数。例如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);
相关文章:
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 使用额外的变量使计算更容易理解 - (多少)我减慢了代码的速度?
- 是否可以在没有结构的情况下创建新的类型变量?
- 为什么类型变量;不调用默认 CTR
- 模板专用化中的类型将继续计算?
- 如何使用CIN将输入整数值获取到char类型变量中
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- 如何计算长长类型变量中的位数
- 基本类型变量的赋值计算序列,右操作数引发异常
- c++中另一种计算双类型变量的方法