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

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

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

Студворк — интернет-сервис помощи студентам
Подсчет битов выполнить двумя способами:
 используя шаблон с одним битом равным 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2021, 01:12
Ответы с готовыми решениями:

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

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

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

8
 Аватар для vantfiles
1018 / 1913 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
03.06.2021, 08:42
Это магия:

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
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,181
03.06.2021, 08:48
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
 Аватар для vantfiles
1018 / 1913 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
03.06.2021, 09:00
Цитата Сообщение от Verevkin Посмотреть сообщение
x &= x - 1
Все-таки полезно пояснить, что это выражение обнуляет крайний справа единичный бит.
0
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,181
03.06.2021, 09:04
Цитата Сообщение от vantfiles Посмотреть сообщение
Все-таки полезно пояснить, что это выражение обнуляет крайний справа единичный бит.
Ну так поясни. Никто ж не возражает.
0
 Аватар для vantfiles
1018 / 1913 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
03.06.2021, 09:20
Кстати, алгоритм с байтовым массивом тоже есть в этой книге:

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Эксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,169
03.06.2021, 09:33
Цитата Сообщение от montarin Посмотреть сообщение
Напишите функцию, которая принимает с клавиатуры целое число
типа int и подсчитывает в заданном байте количество битов, равных 1.
Почему тогда тема озаглавлена "Подсчет числа значащих битов"???
0
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,181
03.06.2021, 09:37
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Почему тогда тема озаглавлена "Подсчет числа значащих битов"???
Патамушта гладиолус.
Судя по примеру в вопросе, нужно посчитать именно биты, равные 1.
0
0 / 0 / 0
Регистрация: 04.06.2018
Сообщений: 5
03.06.2021, 12:47  [ТС]
Ну вот как было написано в задании так и выставил

Добавлено через 1 минуту
Буду разбираться дальше, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2021, 12:47
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru