共用方式為


__lzcnt16,__lzcnt __lzcnt64

Microsoft 專有的

計數的前置字元零 16-、 32 或 64 位元的整數。

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

參數

  • [in] value
    16-、 32 或 64 位元不帶正負號的整數,若要掃描的以零開始。

傳回值

前置零的位元中的value參數。 如果value為零,則傳回值是輸入運算元的值 (16、 32 或 64) 的大小。 如果最重要的位元的value為 1,則傳回值為零。

需求

內建

架構

__lzcnt16

進階的位元操作

__lzcnt

進階的位元操作

__lzcnt64

在 64 位元模式的進階位元操作。

標頭檔 <intrin.h>

備註

每個這些內建函式會產生lzcnt指令。 值的大小, lzcnt指令會傳回其引數的大小相同。 在 32 位元模式有一般沒有 64 位元用途暫存器,因此沒有 64 位元lzcnt。

若要判斷硬體支援 lzcnt指令呼叫**__cpuid**與內建InfoType=0x80000001 ,並檢查位元 5 的CPUInfo[2] (ECX)。 這個位元會支援指令時,若為 1 和 0 否則。 如果您執行的程式碼會使用此內建不支援的硬體上 lzcnt指令時,結果會發生無法預期。

範例

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

結束 Microsoft 特定

藉由收益進階微裝置,及版權 2007年.人所有之商標。 重製與收益進階微裝置,及來自的使用權限.

請參閱

參考

編譯器內建