__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年.人所有之商標。 重製與收益進階微裝置,及來自的使用權限.