Я не знаю Specman, но другой способ, которым я видел это, выглядит немного глупо, но имеет тенденцию быть эффективным: Сохранить массив из 256 элементов; каждый элемент массива состоит из количества битов, соответствующих этому значению. Например (псевдокод):
bit_count = [0, 1, 1, 2, 1, ...]
Таким образом, bit_count 2 == 1, потому что значение 2 в двоичном виде имеет один бит "1". Похоже, bit_count [255] == 8.
Затем разбейте uint на байты, используйте значения байтов для индексации в массиве bit_count и добавьте результаты. Псевдокод:
total = 0
for byte in list_of_bytes
total = total + bit_count[byte]
РЕДАКТИРОВАТЬ
Этот вопрос обнаружен в книге Прекрасный код в главе Генри С. Уоррена. Кроме того, Мэтт Хауэллс показывает реализацию на языке C, которая эффективно рассчитывает количество битов. См. этот ответ .