Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

__lzcnt16, __lzcnt, __lzcnt64

Microsoft-spezifisch

Ermittelt die Anzahl von führenden Nullen in eine Drehung um 16 Grad, 32 oder 64 Byte-ganze Zahl.

unsigned short __lzcnt16(
   unsigned short value
);
unsigned int __lzcnt(
   unsigned int value
);
unsigned __int64 __lzcnt64(
   unsigned __int64 value
);

[in] value

Das 16 -, 32 - oder für führende Nullen zu überprüfende 64-Bit-Ganzzahl ohne Vorzeichen.

Die Anzahl der Bits der führenden Null in value-Parameter. Wenn value (null) ist, ist der Rückgabewert die Größe des Eingabe- operanden (16, 32 oder 64). Wenn das höchstwertige Byte eines value eins ist, ist der Rückgabewert (null).

Intrinsisch

Architektur

__lzcnt16

Erweiterte Bitmanipulation

__lzcnt

Erweiterte Bitmanipulation

__lzcnt64

Erweiterte Bitmanipulation im 64-Bit-Modus.

Headerdatei <intrin.h>

Jede dieser systeminternen Funktionen generiert die lzcnt-Anweisung. Die Größe des Werts, den die lzcnt-Anweisung zurückgibt, entspricht der Größe des Arguments. In 32-Bit- Modus gibt es keine 64-Bit- allgemeinen Register, sodass kein 64-Bit- lzcnt.

Um Hardwareunterstützung für die lzcnt-Anweisung zu ermitteln, rufen Sie die __cpuid systeminterne Funktion mit InfoType=0x80000001 und Prüfbit 5 von CPUInfo[2] (ECX) an. Das Bit beträgt 1, wenn die Anweisung unterstützt wird; andernfalls 0. Wenn Sie Code ausführen, der diese systeminterne Funktion auf Hardware verwendet, die nicht die lzcnt-Anweisung unterstützt, die Ergebnisse sind unvorhersehbar.

// Compile this test with: /EHsc
#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 = __lzcnt16(us[i]);
    cout << "__lzcnt16(0x" << hex << us[i] << ") = " << dec << usr << endl;
  }

  for (int i=0; i<4; i++) {
    uir = __lzcnt(ui[i]);
    cout << "__lzcnt(0x" << hex << ui[i] << ") = " << dec << uir << endl;
  }
}

  __lzcnt16 (0x0) = 16 __lzcnt16 (0xff) = 8 __lzcnt16 (0xffff) = 0 __lzcnt (0x0) = __lzcnt 0xff (32) = 24 __lzcnt (0xffff) = __lzcnt 0xffffffff (16) = 0

Copyright 2007 bis Advanced Micro Devices, Inc alle Rechte vorbehalten. Reproduziert mit zulässigen Advanced Micro Devices, Inc

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft