Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
digital_boy
0 / 0 / 0
Регистрация: 01.08.2015
Сообщений: 11
#1

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

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

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

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

Составить функцию для подсчета количества различных чисел в массиве
Составить функцию для подсчета количества различных чисел в массиве, содержащем...

Создать функцию нахождения количества элементов одномерного массива
Создать функцию нахождения количества элементов одномерного массива, по модулю...

Некорректная работа функции нахождения "квадрата единиц" в двумерном массиве
Задание: Задан квадратный массив А из N стpок и N столбцов, элементами которого...

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

7
Martein
678 / 89 / 15
Регистрация: 22.06.2014
Сообщений: 184
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
Эксперт С++
3178 / 1705 / 435
Регистрация: 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
Заблокирован
Эксперт С++
30.08.2015, 23:32 #6
Цитата Сообщение от digital_boy Посмотреть сообщение
А можно небольшой пример использования?
в гугле забанили?

http://www.cplusplus.com/reference/bitset/bitset/count/
0
mymedia
193 / 193 / 120
Регистрация: 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
Эксперт С++
3178 / 1705 / 435
Регистрация: 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

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

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

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


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

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

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