__popcnt16, __popcnt, __popcnt64
Khusus Microsoft
Menghitung jumlah 1
bit (jumlah populasi) dalam bilangan bulat yang tidak ditandatangani 16-, 32-, atau 64-bit.
Sintaks
unsigned short __popcnt16(
unsigned short value
);
unsigned int __popcnt(
unsigned int value
);
unsigned __int64 __popcnt64(
unsigned __int64 value
);
Parameter
value
[di] Bilangan bulat 16-, 32-, atau 64-bit yang tidak ditandatangani yang jumlah populasinya kita inginkan.
Nilai hasil
Jumlah 1
bit dalam parameter nilai .
Persyaratan
Intrinsik | Sistem |
---|---|
__popcnt16 |
Manipulasi Bit Tingkat Lanjut |
__popcnt |
Manipulasi Bit Tingkat Lanjut |
__popcnt64 |
Manipulasi Bit Tingkat Lanjut dalam mode 64-bit. |
File header<intrin.h>
Keterangan
Masing-masing intrinsik menghasilkan popcnt
instruksi. Dalam mode 32-bit, tidak ada register tujuan umum 64-bit, sehingga 64-bit popcnt
tidak didukung.
Untuk menentukan dukungan perangkat keras untuk popcnt
instruksi, panggil __cpuid
intrinsik dengan InfoType=0x00000001
dan periksa bit 23 dari CPUInfo[2] (ECX)
. Bit ini adalah 1 jika instruksi didukung, dan 0 sebaliknya. Jika Anda menjalankan kode yang menggunakan intrinsik ini pada perangkat keras yang tidak mendukung popcnt
instruksi, hasilnya tidak dapat diprediksi.
Contoh
#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 Khusus Microsoft
Bagian Hak Cipta 2007 oleh Perangkat Mikro Tingkat Lanjut, Inc. Hak cipta dilindungi undang-undang. Direproduksi dengan izin dari Advanced Micro Devices, Inc.