__lzcnt16, __lzcnt, __lzcnt64

 

Veröffentlicht: Juli 2016

Die neueste Dokumentation zu Visual Studio 2017 finden Sie unter Dokumentation zu Visual Studio 2017.

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  
);  

Parameter

[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).

IntrinsischArchitektur
__lzcnt16Erweiterte Bitmanipulation
__lzcntErweiterte Bitmanipulation
__lzcnt64Erweiterte Bitmanipulation im 64-Bit-Modus.

Headerdatei <intrin.h>

Jede dieser systeminternen Funktionen generiert die lzcnt-Anweisung. Die Größe des Werts, den dielzcnt-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 dielzcnt-Anweisung zu bestimmen __cpuid direkt aufrufen und InfoType=0x80000001 mit Prüfbit 5 von CPUInfo[2] (ECX). Das Bit beträgt 1, wenn die Anweisung unterstützt wird, andernfalls 0. Wenn Sie diesen Code ausführen, der Hardware, das auf die ist, die nicht direktlzcnt-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) = 32
__lzcnt (0xff) = 24
__lzcnt (0xffff) = 16
__lzcnt (0xffffffff) = 0

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

Intrinsische Compilerfunktionen

Anzeigen: