С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 5
1

Подсчет числа значащих битов

03.06.2021, 01:12. Показов 1897. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подсчет битов выполнить двумя способами:
 используя шаблон с одним битом равным 1, и последовательно сдвигая его на одну
позицию;
 предварительно создав таблицу (массив) типа unsigned char из 256 элементов
(количество значений которое может содержать один байт) содержащую
количество битов равных 1 для соответствующего индекса массива. Таблица:
bitsMas[ 0 ] = 0; // 0000 0000
bitsMas[ 1 ] = 1; // 0000 0001
bitsMas[ 2 ] = 1; // 0000 0010
bitsMas[ 3 ] = 2;
...
// 0000 0011
bitsMas[ 254 ] = 7; // 1111 1110
bitsMas[ 255 ] = 8; // 1111 1111
Каждый байт в полученном целом значении будет являться индексом в таблице.
Следовательно требуется только сложить четыре значения элементов массива.
9
Программа должна выводить число в десятичном и двоичном представлении, чтобы
убедиться, что подсчет битов проведен корректно.

Напишите функцию, которая принимает с клавиатуры целое число
типа int и подсчитывает в заданном байте количество битов, равных 1.


зашел в тупикю считает только в последнем разряде, как сделать что бы во всех считал?

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
25
26
unsigned int Count1(unsigned char n2)
{
    
    size_t num_one = 0;
    for (size_t i = 0; i < CHAR_BIT * sizeof n2; ++i, n2 >>= 1)
    {
        if ((n2 & 1) == 1)
        {
 
            ++num_one;
            
        }
    }
    
 return num_one;
}
 
unsigned int Count2(unsigned char n2)
{
    unsigned char Array[256];
    for (int i = 0; i < 256; i++)
    {
        Array[i] = Count1(i);
    }
    return Array[n2];
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2021, 01:12
Ответы с готовыми решениями:

Заменить n левых битов числа x на n левых битов числа y (не могу найти ошибку в коде)
Написать функцию, заменяющую n левых битов числа x на n левых битов числа y. Провести вычисление...

Подсчет битов
На входе даны 2 последовательности по 8 бит IN_0, IN_1. OUT_0 изначально равен 0. Если в...

Подсчёт битов в числе равных 1.
День добрый. Подскажите, как написать программку, которая принимает с клавиатуры любое значение...

Подсчёт битов в целом числе
Напишите программу, которая принимает с клавиатуры целое число типа int и подсчитывает в нем ...

8
1017 / 1905 / 178
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
03.06.2021, 08:42 2
Это магия:

C++
1
2
3
4
5
6
7
8
9
10
function bit_count( unsigned int x )
{
    x = ( х & 0x55555555 ) + ( (х >>  1 ) & 0x55555555 );
    x = ( x & 0x33333333 ) + ( (x >>  2 ) & 0x33333333 );
    x = ( x & 0x0F0F0F0F ) + ( (x >>  4 ) & 0x0F0F0F0F );
    x = ( х & 0x00FF00FF ) + ( (x >>  8 ) & 0x00FF00FF );
    x = ( x & 0x0000FFFF ) + ( (х >> 16 ) & 0x0000FFFF );
 
    return x
}
Алгоритм из книги "Уоррен Генри - Алгоритмические трюки для программистов"

Добавлено через 16 минут
Как-то путанно у Вас.

C++
1
2
3
4
5
6
7
8
9
10
11
unsigned int Count1( unsigned char n2 )
{
    size_t num_one = 0;
    for( size_t i = 0; i < CHAR_BIT * sizeof n2; i++ )
    {
        num_one += n2 & 1;
        n2 = n2 >> 1;
    }
    
 return num_one;
}
0
Злостный нарушитель
9598 / 5191 / 1185
Регистрация: 12.03.2015
Сообщений: 24,512
03.06.2021, 08:48 3
C++
1
2
3
4
5
6
inline unsigned bit_count(long long x)
{
  unsigned count = 0;
  while (x) x &= x - 1, count++;
  return count;
}
0
1017 / 1905 / 178
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
03.06.2021, 09:00 4
Цитата Сообщение от Verevkin Посмотреть сообщение
x &= x - 1
Все-таки полезно пояснить, что это выражение обнуляет крайний справа единичный бит.
0
Злостный нарушитель
9598 / 5191 / 1185
Регистрация: 12.03.2015
Сообщений: 24,512
03.06.2021, 09:04 5
Цитата Сообщение от vantfiles Посмотреть сообщение
Все-таки полезно пояснить, что это выражение обнуляет крайний справа единичный бит.
Ну так поясни. Никто ж не возражает.
0
1017 / 1905 / 178
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
03.06.2021, 09:20 6
Кстати, алгоритм с байтовым массивом тоже есть в этой книге:

C++
1
2
3
4
5
6
7
8
9
10
11
12
int pop (unsigned x) // Поиск в таблице
{
    static char table [256] = {
    0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
    ...
    4, 5, 5, 6, 5, 6, б, 7, 5, 6, 6, 7, 6, 7, 7, 8};
 
    return table [x & OxFF] +
           table [(x » 8) & OxFF] +
           table [(x » 16) & OxFF] +
           table [(x » 24)] ;
}
0
Вездепух
Эксперт CЭксперт С++
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,875
03.06.2021, 09:33 7
Цитата Сообщение от montarin Посмотреть сообщение
Напишите функцию, которая принимает с клавиатуры целое число
типа int и подсчитывает в заданном байте количество битов, равных 1.
Почему тогда тема озаглавлена "Подсчет числа значащих битов"???
0
Злостный нарушитель
9598 / 5191 / 1185
Регистрация: 12.03.2015
Сообщений: 24,512
03.06.2021, 09:37 8
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Почему тогда тема озаглавлена "Подсчет числа значащих битов"???
Патамушта гладиолус.
Судя по примеру в вопросе, нужно посчитать именно биты, равные 1.
0
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 5
03.06.2021, 12:47  [ТС] 9
Ну вот как было написано в задании так и выставил

Добавлено через 1 минуту
Буду разбираться дальше, спасибо
0
03.06.2021, 12:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2021, 12:47
Помогаю со студенческими работами здесь

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

Из двух целых чисел А и B собрать одно, состоящее из четных битов A и нечетных битов B...
Нужна помощь с задачей. Из двух целых чисел А и B собрать одно, состоящее из четных битов A и...

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

Цикл для проверки битов числа
Имеется задача: &quot;Определить, насколько в числе А больше значащих битов, равных единице, чем битов,...

Вывод двоичного числа и сброска битов
Примерно такого типа задача Написать программу на языке C++, читающую со стандартного ввода 4...

Побитовые операции в Си. Изменение отдельных битов числа
Собственно задание такое: &quot;Дано длинное целое неотрицательное число k. Получить целое число,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru