__popcnt16, __popcnt, __popcnt64

Блок, относящийся только к системам Майкрософт

Подсчитывает количество битов (число популяций 1 ) в 16-, 32-разрядном или 64-разрядном целочисленном целочисленном значении без знака.

Синтаксис

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

Параметры

значение
[in] 16-, 32-или 64-разрядное целое число без знака, для которого требуется число населения.

Возвращаемое значение

Число 1 битов в параметре значения .

Требования

Intrinsic Архитектура
__popcnt16 Расширенные операции с битами
__popcnt Расширенные операции с битами
__popcnt64 Расширенная обработка битов в 64-разрядном режиме.

Файл<заголовка intrin.h>

Замечания

Каждая из встроенных функций создает инструкцию popcnt . В 32-разрядном режиме нет 64-разрядных регистров общего назначения, поэтому 64-разрядная popcnt версия не поддерживается.

Чтобы определить поддержку оборудования инструкцииpopcnt, вызовите __cpuid встроенную функцию и InfoType=0x00000001 проверка бит 23CPUInfo[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;
  }
}
__popcnt16(0x0) = 0
__popcnt16(0xff) = 8
__popcnt16(0xffff) = 16
__popcnt(0x0) = 0
__popcnt(0xff) = 8
__popcnt(0xffff) = 16
__popcnt(0xffffffff) = 32

Завершение блока, относящегося только к системам Майкрософт

Части авторских прав 2007 от Advanced Micro Devices, Inc. Все права защищены. Воспроизводится с разрешением от Advanced Micro Devices, Inc.

См. также

Встроенные компоненты компилятора