__popcnt16, __popcnt, __popcnt64
Spécifique à Microsoft
Compte le nombre de bits un (dénombrement de la population) dans un entier non signé 16 - 32, -, ou 64 octets.
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Paramètres
- [in] value
Le (16, 32), ou entier non signé 64 bits pour lequel vous souhaitez le dénombrement de la population.
Valeur de retour
Le nombre de bits un dans le paramètre d' value .
Configuration requise
Intrinsèque |
Architecture |
---|---|
__popcnt16 |
Manipulation de bits avancée |
__popcnt |
Manipulation de bits avancée |
__popcnt64 |
Manipulation de bits avancée en mode 64 bits. |
Fichier d'en-tête <intrin.h>
Notes
Chacune de ces intrinsèques génère des instructions d'popcnt . La taille de la valeur que l'instruction d'popcnt retourne est la même que la taille de son argument. En mode 32 bits il n'y a des registres à caractère général pas 64 bits, donc pas popcnt64 bits.
Pour déterminer la prise en charge du matériel pour l'instruction d' popcnt, appelez l'intrinsèque de __cpuid avec InfoType=0x00000001 et le bit de contrôle 23 d' CPUInfo[2] (ECX). Ce bit est 1 si l'instruction est prise en charge, et 0 sinon. Si vous exécutez le code qui utilise cette intrinsèque sur le matériel qui ne prend pas en charge l'instruction d' popcnt , les résultats sont imprévisibles.
Exemple
#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;
}
}
TERMINEZ le détail de Microsoft
Copyright 2007 par Advanced Micro Devices, Inc tous droits réservés. Reproduit avec l'autorisation d'Advanced Micro Devices, Inc