__popcnt16, __popcnt, __popcnt64
Specyficzne dla firmy Microsoft
Zlicza 1
liczbę bitów (liczba populacji) w 16-, 32-lub 64-bitowej liczbie całkowitej bez znaku.
Składnia
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Parametry
wartość
[in] 16-, 32-bitowa lub 64-bitowa liczba całkowita, dla której chcemy liczyć populację.
Wartość zwracana
Liczba bitów 1
w parametrze wartości .
Wymagania
Nieodłączny | Architektura |
---|---|
__popcnt16 |
Zaawansowane manipulowanie bitami |
__popcnt |
Zaawansowane manipulowanie bitami |
__popcnt64 |
Zaawansowane manipulowanie bitami w trybie 64-bitowym. |
Plik<nagłówka intrin.h>
Uwagi
Każda z funkcji wewnętrznych generuje instrukcję popcnt
. W trybie 32-bitowym nie ma rejestrów ogólnego przeznaczenia 64-bitowych, więc 64-bitowe popcnt
nie jest obsługiwane.
Aby określić obsługę sprzętu popcnt
instrukcji, wywołaj __cpuid
funkcję wewnętrzną za pomocą InfoType=0x00000001
polecenia i sprawdź bit 23 z CPUInfo[2] (ECX)
. Ten bit to 1, jeśli instrukcja jest obsługiwana, a w przeciwnym razie 0. Jeśli uruchamiasz kod korzystający z tych funkcji wewnętrznych na sprzęcie, który nie obsługuje popcnt
instrukcji, wyniki są nieprzewidywalne.
Przykład
#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
Części Copyright 2007 firmy Advanced Micro Devices, Inc. Wszelkie prawa zastrzeżone. Odtworzony z uprawnieniami firmy Advanced Micro Devices, Inc.