__popcnt16, __popcnt, __popcnt64
Microsoft 전용
1
부호 없는 16비트, 32비트 또는 64비트 정수의 비트 수(모집단 수)를 계산합니다.
구문
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
매개 변수
value
[in] 모집단 수를 구하려는 16비트, 32비트 또는 64비트 부호 없는 정수입니다.
반환 값
값 매개 변수의 1
비트 수입니다.
요구 사항
Intrinsic | 아키텍처 |
---|---|
__popcnt16 |
고급 비트 조작 |
__popcnt |
고급 비트 조작 |
__popcnt64 |
64비트 모드의 고급 비트 조작 |
헤더 파일<intrin.h>
설명
각 내장 함수는 명령을 생성합니다 popcnt
. 32비트 모드에서는 64비트 범용 레지스터가 없으므로 64비 popcnt
트가 지원되지 않습니다.
명령에 대한 popcnt
하드웨어 지원을 확인하려면 내장 InfoType=0x00000001
함수를 __cpuid
호출하고 23의 CPUInfo[2] (ECX)
비트 23을 확인합니다. 명령이 지원되는 경우 이 비트는 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;
}
}
__popcnt16(0x0) = 0
__popcnt16(0xff) = 8
__popcnt16(0xffff) = 16
__popcnt(0x0) = 0
__popcnt(0xff) = 8
__popcnt(0xffff) = 16
__popcnt(0xffffffff) = 32
Microsoft 전용 종료
부분 저작권 2007 고급 마이크로 디바이스, Inc. 모든 권한이 예약되어 있습니다. 고급 마이크로 디바이스, Inc.의 권한으로 재현