__popcnt16, __popcnt, __popcnt64
Microsoft Specific
Counts the number of 1
bits (population count) in a 16-, 32-, or 64-bit unsigned integer.
Syntax
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Parameters
value
[in] The 16-, 32-, or 64-bit unsigned integer for which we want the population count.
Return value
The number of 1
bits in the value parameter.
Requirements
Intrinsic | Architecture |
---|---|
__popcnt16 |
Advanced Bit Manipulation |
__popcnt |
Advanced Bit Manipulation |
__popcnt64 |
Advanced Bit Manipulation in 64-bit mode. |
Header file <intrin.h>
Remarks
Each of the intrinsics generates the popcnt
instruction. In 32-bit mode, there are no 64-bit general-purpose registers, so 64-bit popcnt
isn't supported.
To determine hardware support for the popcnt
instruction, call the __cpuid
intrinsic with InfoType=0x00000001
and check bit 23 of CPUInfo[2] (ECX)
. This bit is 1 if the instruction is supported, and 0 otherwise. If you run code that uses these intrinsics on hardware that doesn't support the popcnt
instruction, the results are unpredictable.
Example
#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;
}
}
__popcnt16(0x0) = 0
__popcnt16(0xff) = 8
__popcnt16(0xffff) = 16
__popcnt(0x0) = 0
__popcnt(0xff) = 8
__popcnt(0xffff) = 16
__popcnt(0xffffffff) = 32
END Microsoft Specific
Portions Copyright 2007 by Advanced Micro Devices, Inc. All rights reserved. Reproduced with permission from Advanced Micro Devices, Inc.
See also
Phản hồi
https://aka.ms/ContentUserFeedback.
Sắp ra mắt: Trong năm 2024, chúng tôi sẽ dần gỡ bỏ Sự cố với GitHub dưới dạng cơ chế phản hồi cho nội dung và thay thế bằng hệ thống phản hồi mới. Để biết thêm thông tin, hãy xem:Gửi và xem ý kiến phản hồi dành cho