Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/58: Рейтинг темы: голосов - 58, средняя оценка - 4.55
144 / 144 / 32
Регистрация: 26.10.2008
Сообщений: 782
1

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

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

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

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

Кто-нибудь знает как это сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2010, 18:19
Ответы с готовыми решениями:

Определение количества нулей в двоичной записи числа
Определить, сколько нулей в двоичной записи произвольного числа А (100<А<1000)?

Определить чего больше в двоичной записи произвольного числа: единиц или нулей?
Друзья, помогите пожалуйста. Есть код программки, которая считает количество нулей в двоичной...

Определить количество нулей в цифровой записи числа, кроме нулей в младших разрядах
Дано натуральное число N (N > 9). Определить количество нулей в цифровой записи числа, кроме нулей...

Определить количество нулей в цифровой записи числа, кроме нулей в младших разрядах
#include <iostream> #include<conio.h> main() { setlocale(LC_ALL, "Russian"); int N,digit = 0;...

5
Эксперт С++
1660 / 1032 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
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);
}
1
144 / 144 / 32
Регистрация: 26.10.2008
Сообщений: 782
30.03.2010, 20:02  [ТС] 3
В таком виде программа не работает. Нужно условие в строке 6 заменить на
C++
1
2
if (n & 1)
...
Я немного ошибся, нужно получить число нулей в конце двоичного представления числа.
Стандартных функции скорее всего нет, но можно делать как в примере.
Спасибо!
0
Эксперт С++
7172 / 3230 / 77
Регистрация: 17.06.2009
Сообщений: 14,166
31.03.2010, 11:05 4
Двоичное число .....100000
Просто перебираем биты с самого младшего, пока не наткнемся на 1 или число закончится.
Если число закончится - значит все биты равны 0 - это число 0, можем проверить отдельно.
0
230 / 60 / 17
Регистрация: 11.03.2010
Сообщений: 294
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
}
0
144 / 144 / 32
Регистрация: 26.10.2008
Сообщений: 782
31.03.2010, 17:40  [ТС] 6
Я уже сделал.
Но всё равно спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2010, 17:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Определить количество нулей в цифровой записи числа, кроме нулей в младших разрядах (Pascal -> С++)
Var i: longint; N: integer; begin write('input Nomber, pleeeaaase: '); readln(i); N:= 0;...

Количество нулей в записи числа
Помогите пожалуйста написать эдакое... Дано натуральное число n. Подсчитать количество нулей в...

Найти количество нулей в конце записи факториала числа
Найти количество нулей в конце записи факториала числа n. Подскажет, кто алгоритм? Или хотя бы в...

Найти количество нулей в конце записи факториала N
Найти количество нулей в конце записи факториала числа n


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

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

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