共用方式為


__popcnt16,__popcnt __popcnt64

Microsoft 專有的

計算的其中一個 16-、 32 或 64 位元不帶正負號的整數中的位元 (擴展項目個數)。

unsigned short __popcnt16(
   unsigned short value
);
unsigned int __popcnt(
   unsigned int value
);
unsigned __int64 __popcnt64(
   unsigned __int64 value
);

參數

  • [in] value
    16-、 32 或 64 位元不帶正負號的整數,我們想要擴展計數。

傳回值

在一個位元數value參數。

需求

內建

架構

__popcnt16

進階的位元操作

__popcnt

進階的位元操作

__popcnt64

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

標頭檔 <intrin.h>

備註

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

若要判斷硬體支援popcnt 指令,請打**__cpuid**與內建InfoType=0x00000001 ,並檢查 23 不少CPUInfo[2] (ECX)。 可說這個位元是 1,如果在指令都有支援,而 0。 如果您執行的程式碼會使用此內建不支援的硬體上popcnt指令時,結果會發生無法預期。

範例

#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 = __popcnt16(us[i]);
    cout << "__popcnt16(0x" << hex << us[i] << ") = " << dec << usr << endl;
  }

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

結束 Microsoft 特定

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

請參閱

參考

編譯器內建