__popcnt16, __popcnt, __popcnt64

Microsoft-spezifisch

Zählt die Anzahl der 1 Bits (Populationsanzahl) in einer ganzzahligen 16-, 32- oder 64-Bit-Ganzzahl.

Syntax

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

Parameter

value
[in] Die 16-, 32- oder 64-Bit-Ganzzahl ohne Vorzeichen, für die die Anzahl der Grundgesamtheiten verwendet werden soll.

Rückgabewert

Die Anzahl der 1 Bits im Wertparameter .

Anforderungen

Intrinsic Aufbau
__popcnt16 Erweiterte Bitbearbeitung
__popcnt Erweiterte Bitbearbeitung
__popcnt64 Erweiterte Bitbearbeitung im 64-Bit-Modus.

Headerdatei<intrin.h>

Hinweise

Jede der systeminternen Werte generiert die popcnt Anweisung. Im 32-Bit-Modus gibt es keine allgemeinen 64-Bit-Register, sodass 64-Bit popcnt nicht unterstützt wird.

Um die Hardwareunterstützung für die popcnt Anweisung zu ermitteln, rufen Sie die __cpuid systeminterne Verbindung auf InfoType=0x00000001 , und überprüfen Sie Bit 23 von CPUInfo[2] (ECX). Dieses Bit ist 1, wenn die Anweisung unterstützt wird, und 0 andernfalls. Wenn Sie Code ausführen, der diese systeminternen Elemente auf Hardware verwendet, die die popcnt Anweisung nicht unterstützt, sind die Ergebnisse unvorhersehbar.

Beispiel

#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

Ende Microsoft-spezifisch

Portions Copyright 2007 by Advanced Micro Devices, Inc. Alle Rechte vorbehalten. Vervielfältigt mit Erlaubnis von Advanced Micro Devices, Inc.

Siehe auch

Systeminterne Compiler