Aracılığıyla paylaş


__lzcnt16, __lzcnt, __lzcnt64

Microsoft'a Özgü

16, 32 veya 64 bitlik bir tamsayıdaki baştaki sıfır sayısını sayar.

Sözdizimi

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

Parametreler

value
[in] Baştaki sıfırları taramak için 16, 32 veya 64 bit işaretsiz tamsayı.

Dönüş değeri

Parametresindeki baştaki value sıfır bit sayısı. Sıfır ise value , dönüş değeri giriş işleneninin boyutudur (16, 32 veya 64). En önemli biti value bir ise, dönüş değeri sıfırdır.

Gereksinimler

Içsel Mimari
__lzcnt16 AMD: Gelişmiş Bit Düzenlemesi (ABM)

Intel: Haswell
__lzcnt AMD: Gelişmiş Bit Düzenlemesi (ABM)

Intel: Haswell
__lzcnt64 AMD: 64 bit modunda Gelişmiş Bit Düzenlemesi (ABM).

Intel: Haswell

intrin.h üst bilgi dosyası<>

Açıklamalar

İçsel değerlerin her biri yönergeyi lzcnt oluşturur. Yönergenin döndürdüğü değerin lzcnt boyutu, bağımsız değişkeninin boyutuyla aynıdır. 32 bit modunda 64 bit genel amaçlı yazmaç yoktur, bu nedenle 64 bit lzcnt desteklenmez.

Yönergeye lzcnt yönelik donanım desteğini belirlemek için ile iç InfoType=0x80000001 öğesini çağırın __cpuid ve bit 5'ini CPUInfo[2] (ECX)denetleyin. Yönerge destekleniyorsa bu bit 1, aksi takdirde 0 olur. Yönergeyi desteklemeyen lzcnt donanımda iç kodunu kullanan bir kod çalıştırırsanız, sonuçlar tahmin edilemez.

Yönergeyi lzcnt desteklemeyen Intel işlemcilerde yönerge bayt kodlaması olarak bsr yürütülür (bit tarama ters). Kod taşınabilirliği önemliyse bunun yerine iç öğesini kullanmayı _BitScanReverse göz önünde bulundurun. Daha fazla bilgi için bkz . _BitScanReverse, _BitScanReverse64.

Örnek

// 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

END Microsoft'a Özgü

Bu içeriğin bazı bölümleri Advanced Micro Devices, Inc. tarafından telif hakkı 2007'dir. Tüm hakları saklıdır. Reproduced with permission from Advanced Micro Devices, Inc.

Ayrıca bkz.

Derleyici iç bilgileri