__popcnt16, __popcnt, __popcnt64
Específicos de Microsoft
Cuenta el número de bits uno (número de la población) en un entero sin signo de 16 -, 32 -, o 64 bytes.
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Parámetros
- [in] value
El 16 -, 32 -, o el entero sin signo de 64 bits para el que se desea el recuento de la población.
Valor devuelto
El número de bits uno en el parámetro de value .
Requisitos
Intrínseco |
Arquitectura |
---|---|
__popcnt16 |
Manipulación de bits avanzadas |
__popcnt |
Manipulación de bits avanzadas |
__popcnt64 |
Manipulación de bits avanzada en modo de 64 bits. |
Archivo de encabezado <intrin.h>
Comentarios
Cada uno de estos intrínseco genera la instrucción depopcnt . El tamaño del valor que la instrucción depopcnt devuelve es igual que el tamaño de su argumento. En modo de 32 bits hay registros de propósito general no 64 bits, por consiguiente ningún popcnt64 bits.
Para determinar la compatibilidad de hardware para la instrucción de popcnt, llame a intrínsecos de __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 de otra manera. Si ejecuta el código que utiliza este intrínseco en el hardware que no admite la instrucción de popcnt , los resultados son imprevisibles.
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;
}
}
Específico de Microsoft de FINAL
Copyright 2007 por Advanced Micro Devices, Inc reservados todos los derechos. Optimizado con permiso de Advanced Micro Devices, Inc