__popcnt16, __popcnt, __popcnt64
Microsoft-spezifisch
Ermittelt die Anzahl von Bits der Leerraum (eins) in einer 16 -, 32 - oder 64: Byte-ganzen Zahl ohne Vorzeichen.
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Parameter
- [in] value
Das 16 -, 32 - oder zum 64-Bit-Ganzzahl ohne Vorzeichen wir die Anzahl der Leerraum.
Rückgabewert
Die Anzahl der Bits im value-Parameter.
Anforderungen
Intrinsisch |
Architektur |
---|---|
__popcnt16 |
Erweiterte Bitmanipulation |
__popcnt |
Erweiterte Bitmanipulation |
__popcnt64 |
Erweiterte Bitmanipulation im 64-Bit-Modus. |
Headerdatei <intrin.h>
Hinweise
Jede dieser systeminternen Funktionen generiert die popcnt-Anweisung. Die Größe des Werts, den die popcnt-Anweisung zurückgibt, entspricht der Größe des Arguments. In 32-Bit- Modus gibt es keine 64-Bit- allgemeinen Register, sodass kein 64-Bit- popcnt.
Um Hardwareunterstützung für die popcnt-Anweisung zu ermitteln, rufen Sie die __cpuid systeminterne Funktion mit InfoType=0x00000001 und Prüfbit 23 von CPUInfo[2] (ECX) an. Das Bit beträgt 1, wenn die Anweisung unterstützt wird; andernfalls 0. Wenn Sie Code ausführen, der diese systeminterne Funktion auf Hardware verwendet, die nicht die popcnt-Anweisung unterstützt, die Ergebnisse sind unvorhersehbar.
Beispiel
#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 ENDES bestimmten
Copyright 2007 bis Advanced Micro Devices, Inc alle Rechte vorbehalten. Reproduziert mit zulässigen Advanced Micro Devices, Inc