Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 45, средняя оценка - 4.69
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
#1

Количество нулей в двоичной записи числа - C++

30.03.2010, 18:19. Просмотров 5715. Ответов 5
Метки нет (Все метки)

Мне нужно посчитать количество нулей в двоичной записи числа.
Как стандартными функциями можно получить двоичное представление числа, а потом посчитать количество нулей, или, может быть, с помощью вставок на assembler?

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

Кто-нибудь знает как это сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2010, 18:19     Количество нулей в двоичной записи числа
Посмотрите здесь:

C++ Количество нулей в записи числа
Взять двоичную запись десятичного числа, посчитать количество нулей C++
C++ Простые числа и количество нулей
C++ Функция, которая для чисел от 0 до n выводит все числа, которые в двоичной записи являются палиндромами
Среди всех n-битных двоичных чисел указать количество тех, в двоичной записи которых нет k единиц подряд C++
Определить количество нулей в цифровой записи числа, кроме нулей в младших разрядах (Pascal -> С++) C++
Определить количество нулей в цифровой записи числа, кроме нулей в младших разрядах C++
Определение количества нулей в двоичной записи числа C++
C++ Определить количество нулей в цифровой записи числа, кроме нулей в младших разрядах
Определить количество подряд идущих нулей в младших разрядах числа C++
C++ Найти количество нулей в конце записи факториала числа
Найти все натуральные числа, меньшие N, в записи которых содержаться K подряд идущих нулей C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
30.03.2010, 19:13     Количество нулей в двоичной записи числа #2
Тебе помогут битовые операции.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int Bits1(unsigned long number)  /* Считает количество единиц*/
{
    unsigned long n = number;
    int i = 0, r = 0;
    for(; i<8*sizeof(n); i++, n>>=1)
        if(i&1)
            r++;
    return r;
}
 
int Bits0(unsigned long number)   /* Считает количество нулей */
{
    return Bits1(~number);
}
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
30.03.2010, 20:02  [ТС]     Количество нулей в двоичной записи числа #3
В таком виде программа не работает. Нужно условие в строке 6 заменить на
C++
1
2
if (n & 1)
...
Я немного ошибся, нужно получить число нулей в конце двоичного представления числа.
Стандартных функции скорее всего нет, но можно делать как в примере.
Спасибо!
odip
Эксперт С++
7155 / 3295 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
31.03.2010, 11:05     Количество нулей в двоичной записи числа #4
Двоичное число .....100000
Просто перебираем биты с самого младшего, пока не наткнемся на 1 или число закончится.
Если число закончится - значит все биты равны 0 - это число 0, можем проверить отдельно.
Hell Knight
230 / 84 / 3
Регистрация: 11.03.2010
Сообщений: 290
31.03.2010, 11:16     Количество нулей в двоичной записи числа #5
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
__asm
{
push eax
push ecx
mov ecx, 8
mov ah, 1b
xor al, al
again:
test number, ah
jz again2
inc al
again2:
shl ah, 1
loop again
pop ecx
pop eax
}
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
31.03.2010, 17:40  [ТС]     Количество нулей в двоичной записи числа #6
Я уже сделал.
Но всё равно спасибо.
Yandex
Объявления
31.03.2010, 17:40     Количество нулей в двоичной записи числа
Ответ Создать тему
Опции темы

Текущее время: 18:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru