Compartilhar via


__popcnt16, __popcnt, __popcnt64

Seção específica da Microsoft

Conta o número de bits 1 (contagem populacional) em um inteiro sem sinal de 16, 32 ou 64 bits.

Sintaxe

unsigned short __popcnt16(
   unsigned short value
);
unsigned int __popcnt(
   unsigned int value
);
unsigned __int64 __popcnt64(
   unsigned __int64 value
);

Parâmetros

value
[in] O inteiro sem sinal de 16, 32 ou 64 bits para o qual queremos a contagem populacional.

Retornar valor

O número de bits 1 no parâmetro value.

Requisitos

Intrinsic Arquitetura
__popcnt16 Manipulação avançada de bits
__popcnt Manipulação avançada de bits
__popcnt64 Manipulação avançada de bits no modo de 64 bits.

Arquivo de cabeçalho<intrin.h>

Comentários

Cada um dos intrínsecos gera a instrução popcnt. No modo de 32 bits, não há registros de uso geral de 64 bits, portanto, não há suporte para 64 bits popcnt.

Para determinar o suporte de hardware para a instrução popcnt, chame o intrínseco __cpuid com InfoType=0x00000001 e verifique o bit 23 de CPUInfo[2] (ECX). Esse bit será 1 se a instrução for compatível e, caso contrário, 0. Se você executar código que usa esse intrínsecos em hardware que não dá suporte à instrução popcnt, os resultados serão imprevisíveis.

Exemplo

#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

Fim da seção específica da Microsoft

Partes com Copyright 2007 da Advanced Micro Devices, Inc. Todos os direitos reservados. Reproduzido com permissão da Advanced Micro Devices, Inc.

Confira também

Compilador intrínsecos