Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2021, 16:04   #1
CrossCriss
 
Регистрация: 31.05.2021
Сообщений: 5
По умолчанию (Си) Посчитать количество нулей после перевода числа в двочиную систему

В данную функцию приходит число, которое нужно перевести в двоичную систему и посчитать количество нулей в нем.
Проблема в том, что фунцкия PrintBits некорректно переводит в двоичную систему число(проверял на калькуляторе), не знаю как иначе сделать. Прошу помощи.... Буду благодарен

Код:
void PrintBits(int dec)
{
   
    int  v;
    v = 128;
    int temp = 0;
    
    for (int i = 7; i >= 0; i--)
    {

        if (dec >= v)
        {
            printf("1");
            dec -= v;
        }
        else {
            printf("0");

            v /= 2;

            temp++;

        }
        
    
            
    }
    printf("\nКоличество нулей в двоичном числе %d", temp);
}
CrossCriss вне форума Ответить с цитированием
Старый 03.06.2021, 20:31   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Код:
void PrintBits(int dec)
{
    int temp = 0;
    for (int i = 8 * sizeof(int) - 1; i >= 0; i--)
    {
        int ch = (dec >> i) & 1;
        printf("%d", ch);
        temp += ch == 0;    
    }
    printf("\nКоличество нулей в двоичном числе %d", temp);
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.06.2021, 21:40   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,570
По умолчанию

Условие неконкретное: незначащие впереди стоящие нули учитываются ? Если нет, то независимо от разрядности int правильный результат получается, если начать с младшего разряда.
Неясен результат в случае отрицательных чисел.
"На любые вопросы даём любые ответы" ©
digitalis вне форума Ответить с цитированием
Старый 03.06.2021, 22:06   #4
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Так цикл выведет только преобразование, не значимые не отобразятся.
И в отрицательных значениях тоже ноли будут.
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу перевода данного натурального числа в восьмеричную систему счисления (Pascal) Nik_832 Паскаль, Turbo Pascal, PascalABC.NET 3 16.04.2016 19:23
Перевод числа из 10 в 16 систему счисления и подсчет количества нулей ksenox Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 23.05.2012 16:58
перевода целого числа в римскую систему счисления enternity Помощь студентам 2 17.10.2011 01:37
посчитать количество нулей в массиве melie91 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 22.02.2011 13:49
Посчитать количество нулей, находящихся на главной диагонали (массив) Sin3v_ Паскаль, Turbo Pascal, PascalABC.NET 6 03.10.2010 16:22