Compartir a través de


__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 Architecture
__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.

Consulte también

Intrínsecos del compilador