__popcnt16, __popcnt, __popcnt64
Específicos de Microsoft
Cuenta el número de bits 1
(recuento de coincidencias) en un entero sin signo de 16, 32 o 64 bits.
Sintaxis
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Parámetros
value
[in] Entero sin signo de 16, 32 o 64 bits cuyo recuento de coincidencias se quiere.
Valor devuelto
Número de bits 1
del parámetro value.
Requisitos
Intrinsic | Arquitectura |
---|---|
__popcnt16 |
Manipulación de bits avanzada |
__popcnt |
Manipulación de bits avanzada |
__popcnt64 |
Manipulación de bits avanzada en modo de 64 bits. |
Archivo de encabezado<intrin.h>
Comentarios
Cada uno de los intrínsecos genera la instrucción popcnt
. En el modo de 32 bits no hay registros de uso general de 64 bits, por lo que no se admite popcnt
de 64 bits.
Para determinar la compatibilidad de hardware con la instrucción popcnt
, llame al intrínseco __cpuid
con InfoType=0x00000001
y compruebe el bit 23 de CPUInfo[2] (ECX)
. Este bit es 1 si se admite la instrucción y 0 en caso contrario. Si ejecuta código que usa estos intrínsecos en hardware que no admite la instrucción popcnt
, los resultados son impredecibles.
Ejemplo
#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 Específicos de Microsoft
Copyright 2007 de Advanced Micro Devices, Inc en determinadas secciones. Todos los derechos reservados. Reproducido con el permiso de Advanced Micro Devices, Inc.