__popcnt16, __popcnt, __popcnt64
Microsoft'a Özgü
16, 32 veya 64 bit işaretsiz tamsayıdaki bit sayısını 1
(popülasyon sayısı) sayar.
Sözdizimi
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Parametreler
value
[in] Popülasyon sayısını istediğimiz 16, 32 veya 64 bit işaretsiz tamsayı.
Dönüş değeri
Değer parametresindeki bit sayısı1
.
Gereksinimler
Içsel | Mimari |
---|---|
__popcnt16 |
Gelişmiş Bit Düzenleme |
__popcnt |
Gelişmiş Bit Düzenleme |
__popcnt64 |
64 bit modunda Gelişmiş Bit Düzenleme. |
intrin.h üst bilgi dosyası<>
Açıklamalar
İçsel değerlerin her biri yönergeyi popcnt
oluşturur. 32 bit modunda 64 bit genel amaçlı yazmaç yoktur, bu nedenle 64 bit popcnt
desteklenmez.
Yönergeye popcnt
yönelik donanım desteğini belirlemek için ile iç InfoType=0x00000001
öğesini çağırın __cpuid
ve 23. bitini CPUInfo[2] (ECX)
denetleyin. Yönerge destekleniyorsa bu bit 1, aksi takdirde 0 olur. Bu iç bilgileri kullanan kodu yönergeyi desteklemeyen popcnt
bir donanımda çalıştırırsanız, sonuçlar tahmin edilemez.
Örnek
#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;
}
}
__popcnt16(0x0) = 0
__popcnt16(0xff) = 8
__popcnt16(0xffff) = 16
__popcnt(0x0) = 0
__popcnt(0xff) = 8
__popcnt(0xffff) = 16
__popcnt(0xffffffff) = 32
END Microsoft'a Özgü
Advanced Micro Devices, Inc. Tarafından Telif Hakkı 2007 Bölümleri Tüm hakları saklıdır. Reproduced with permission from Advanced Micro Devices, Inc.