Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
digital_boy
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 11
#1

Подскажите функцию для нахождения количества единиц в битовом массиве - C++

29.08.2015, 23:08. Просмотров 503. Ответов 7
Метки нет (Все метки)

Ребят, подскажите функцию для нахождения количества единиц в битовом массиве.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2015, 23:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите функцию для нахождения количества единиц в битовом массиве (C++):

Написать функцию для нахождения в одномерном массиве суммы элементов, кратных 7 - C++
Написать функцию для решения следующей задачи. Найти в одномерном массиве сумму элементов кратных 7. Параметры функции – одномерный...

Составить функцию для подсчета количества различных чисел в массиве - C++
Составить функцию для подсчета количества различных чисел в массиве, содержащем n целых чисел: int count(int *a, int n) нашёл...

Создать функцию нахождения количества элементов одномерного массива - C++
Создать функцию нахождения количества элементов одномерного массива, по модулю меньших введенного с клавиатуры значения K . Для работы с...

Intrinsic функция для определения количества единиц в блоке - C++
Есть блок, скажем типа __m256 и между всеми его байтами нужно выполнить xor. Или, что аналогично, посмотреть, четно ли количество единиц в...

Написать программу для перевода единиц измерения количества информации - C++
Я недавно начал изучать С++. Хотел попробовать написать программу для перевода единиц измерения количества информации. Но почему то она не...

исправить функцию нахождения гласных букв в массиве - C++
Помогите,пожалуйста, исправить функцию, которая суммирует вероятности нахождения букв в строке(строка массив типа char,слова разделены...

7
Martein
675 / 86 / 13
Регистрация: 22.06.2014
Сообщений: 178
29.08.2015, 23:28 #2
Замеряешь размер переменной в байтах операцией sizeof(имя_типа/имя_переменной), потом умножаешь это значение на 8, таким образом получая количество бит, потом в цикле с количеством итераций, равным количеству бит в переменной сравниваешь самый младший бит с единицией и операцией побитового сдвига >> двигаешь на 1 бит вправо, считая счётчиком все единицы и пропуская нули.

Добавлено через 13 минут
Допустим вот так можно посчитать биты в unsigned long:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
using namespace std;
 
int main() {
  unsigned long val = 0xFF00FF;
  size_t count = 0;
  for (size_t i = 0; i < sizeof(unsigned long) * 8; ++i)
    if (val & 1 << i)
      ++count;
  cout << count;
  return 0;
}
2
digital_boy
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 11
29.08.2015, 23:31  [ТС] #3
Хм, я подключал заг. файл <bitset> - вроде проще
0
Mr.X
Эксперт С++
3054 / 1699 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
30.08.2015, 02:25 #4
Цитата Сообщение от digital_boy Посмотреть сообщение
подскажите функцию для нахождения количества единиц в битовом массиве
count()
1
digital_boy
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 11
30.08.2015, 23:28  [ТС] #5
Цитата Сообщение от Mr.X Посмотреть сообщение
count()
А можно небольшой пример использования?
0
hoggy
6798 / 2984 / 514
Регистрация: 15.11.2014
Сообщений: 6,745
Завершенные тесты: 1
30.08.2015, 23:32 #6
Цитата Сообщение от digital_boy Посмотреть сообщение
А можно небольшой пример использования?
в гугле забанили?

http://www.cplusplus.com/reference/bitset/bitset/count/
0
mymedia
193 / 193 / 48
Регистрация: 27.05.2011
Сообщений: 544
30.08.2015, 23:46 #7
В GCC можно посчитать биты, равные единице, в unsinged int с помощью встроенной функции __builtin_popcount
Подробнее: https://gcc.gnu.org/onlinedocs/gcc/O...fpopcount-4115
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main() {
    using namespace std;
    int n;
    cin >> n;
    cout << __builtin_popcount(n) << endl;
}

А если ещё компилировать с флагом -msse4, то это будет самый быстрый вариант
0
Mr.X
Эксперт С++
3054 / 1699 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
30.08.2015, 23:46 #8
Цитата Сообщение от digital_boy Посмотреть сообщение
А можно небольшой пример использования?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bitset>
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
typedef int                                         T_int;
typedef std::bitset < sizeof(T_int) * CHAR_BIT  >   T_int_bitset;
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        T_int   x   =   0;
        std::cout   <<  "x = ";
        std::cin    >>  x;
        T_int_bitset    b(x);
        std::cout   <<  b.to_string()
                    <<  std::endl
                    <<  "1_count = "
                    <<  b.count()
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl;
    }//for
}
0
30.08.2015, 23:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2015, 23:46
Привет! Вот еще темы с ответами:

Написать функцию нахождения нечетных чисел в массиве - C++
Задан массив целых чисел. Вывести на экран элементы, являющиеся нечетными числами. Реализовать для двух функции одна для int массива другая...

Напишите функцию поиска количества максимальных элементов в массиве - C++
напишите функцию поиска количества максимальных элементов в массиве (в С++)

Создать функцию поиска количества положительных элементов в массиве - C++
Даны массивы A, i = 1,...,20. и C, j = 1, ..., 20. Создать функцию поиска количества положительных элементов в массиве. Определить с...

Написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине числа. - C++
Написать функцию нахождения в массиве целых чисел наименьшего по абсолютной величине числа.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru