__popcnt16, __popcnt, __popcnt64

Sezione specifica Microsoft

Conta il numero di 1 bit (conteggio popolamento) in un intero senza segno a 16, 32 o 64 bit.

Sintassi

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

Parametri

value
[in] Intero senza segno a 16, 32 o 64 bit per il quale si vuole il conteggio della popolazione.

Valore restituito

Numero di 1 bit nel parametro value .

Requisiti

Intrinsic Architettura
__popcnt16 Manipolazione avanzata dei bit
__popcnt Manipolazione avanzata dei bit
__popcnt64 Manipolazione avanzata dei bit in modalità a 64 bit.

<File di intestazione intrin.h>

Osservazioni:

Ognuna delle funzioni intrinseche genera l'istruzione popcnt . In modalità a 32 bit non sono disponibili registri per utilizzo generico a 64 bit, quindi non è supportato alcuno a 64 bit popcnt .

Per determinare il supporto hardware per l'istruzione popcnt , chiamare l'oggetto __cpuid intrinseco con InfoType=0x00000001 e controllare il bit 23 di CPUInfo[2] (ECX). Questo bit è 1 se l'istruzione è supportata e 0 in caso contrario. Se si esegue codice che usa queste funzioni intrinseche nell'hardware che non supporta l'istruzione popcnt , i risultati sono imprevedibili.

Esempio

#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

Fine sezione specifica Microsoft

Parti copyright 2007 di Advanced Micro Devices, Inc. Tutti i diritti riservati. Riprodotto con l'autorizzazione da Advanced Micro Devices, Inc.

Vedi anche

Intrinseci del compilatore