__popcnt16, __popcnt, __popcnt64

Microsoft 专用

计数一个 (种群统计) 数。 16-, 32- 或 64 字节无符号整数。

unsigned short __popcnt16(
   unsigned short value
);
unsigned int __popcnt(
   unsigned int value
);
unsigned __int64 __popcnt64(
   unsigned __int64 value
);

参数

  • [in] value
    我们需要种群统计的 16-, 32- 或 64 位无符号整数。

返回值

一个位于 value 参数的位数。

要求

内部

体系结构

__popcnt16

高级二进制处理

__popcnt

高级二进制处理

__popcnt64

高级二进制处理在 64 位模式下。

头文件 <intrin.h>

备注

这些内部每个生成popcnt 命令。 popcnt 命令返回值的大小与其参数的大小。 在 32 位模式下不 64 位通用寄存器,因此不能 64 位 popcnt。

若要确定硬件为 popcnt命令支持,调用与 InfoType=0x00000001 的 __cpuid 内部和校验位 23 CPUInfo[2] (ECX)。 此位否则为 1,则命令支持和 0。 如果运行使用在硬件的固有不支持 popcnt 命令的代码,结果是不可预知的。

示例

#include <iostream> 
#include <intrin.h> 
using namespace std; 

int main() 
{
  unsigned short us[3] = {0, 0xFF, 0xFFFF};
  unsigned short usr;
  unsigned int   ui[4] = {0, 0xFF, 0xFFFF, 0xFFFFFFFF};
  unsigned int   uir;

  for (int i=0; i<3; i++) {
    usr = __popcnt16(us[i]);
    cout << "__popcnt16(0x" << hex << us[i] << ") = " << dec << usr << endl;
  }

  for (int i=0; i<4; i++) {
    uir = __popcnt(ui[i]);
    cout << "__popcnt(0x" << hex << ui[i] << ") = " << dec << uir << endl;
  }
}
  

特定于 Microsoft 的结尾

由 Advanced Micro 设备,公司所有权利版权所有 2007 中保留了。 重现经 Advanced Micro 设备授予,公司

请参见

参考

编译器内部函数