__popcnt16, __popcnt, __popcnt64
Section spécifique à Microsoft
Compte le nombre de bits (nombre de 1
population) dans un entier non signé 16-, 32 ou 64 bits.
Syntaxe
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Paramètres
valeur
[in] Entier non signé 16-, 32 ou 64 bits pour lequel nous voulons le nombre de population.
Valeur retournée
Nombre de 1
bits dans le paramètre valeur .
Spécifications
Intrinsic | Architecture |
---|---|
__popcnt16 |
Manipulation avancée des bits |
__popcnt |
Manipulation avancée des bits |
__popcnt64 |
Manipulation avancée des bits en mode 64 bits. |
Fichier<d’en-tête intrin.h>
Notes
Chacune des intrinsèques génère l’instruction popcnt
. En mode 32 bits, il n’existe aucun registre à usage général 64 bits. Par conséquent, la version 64 bits popcnt
n’est pas prise en charge.
Pour déterminer la prise en charge matérielle de l’instruction, appelez l’intrinsèque popcnt
__cpuid
avec InfoType=0x00000001
et vérifiez le bit 23 de CPUInfo[2] (ECX)
. Ce bit est 1 si l’instruction est prise en charge, et 0 sinon. Si vous exécutez du code qui utilise ces intrinsèques sur du matériel qui ne prend pas en charge l’instruction 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;
}
}
__popcnt16(0x0) = 0
__popcnt16(0xff) = 8
__popcnt16(0xffff) = 16
__popcnt(0x0) = 0
__popcnt(0xff) = 8
__popcnt(0xffff) = 16
__popcnt(0xffffffff) = 32
FIN de la section spécifique à Microsoft
Portions Copyright 2007 by Advanced Micro Devices, Inc. Tous les droits réservés. Reproduit avec l’autorisation d’Advanced Micro Devices, Inc.