Заменить шестнадцатеричную цифру на количество единиц, имеющихся в ее двоичном представлении - C (СИ)
Формулировка задачи:
Дано короткое целое неотрицательное число. Заменить каждую входящую в его состав шестнадцатеричную цифру на количество единиц, имеющихся в ее двоичном представлении (например, цифру F надо заменить на 4).
Решение задачи: «Заменить шестнадцатеричную цифру на количество единиц, имеющихся в ее двоичном представлении»
textual
Листинг программы
#include <stdio.h> #include <string.h> int main() { const char *s = "4f5"; // задаём само число int k, i, p = 0; sscanf(s, "%x", &k); // переводим из 16-й строки в 16-е число for(i = strlen(s)*4; i > 0; i--) { if(k & (1 << (i - 1))) p++; if((i - 1)%4 == 0) // 16-я цифра имеет размер 4 бита, поэтому я прохожу 4 бита, потом беру следующие { printf("%d", p); //печатаем кол-во едениц p = 0; } } puts(""); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O и строками
- Задаём само число в виде строки s =
4f5
- Объявляем переменные: k — для хранения шестнадцатеричного числа, i — счётчик циклов, p — счётчик единиц
- С помощью функции sscanf переводим строку в шестнадцатеричное число и сохраняем его в переменной k
- В цикле for перебираем биты числа, начиная с самого старшего (от большего к меньшему), используя размерность 4 бита для каждой цифры в числе
- Проверяем, есть ли единицы в текущем бите (k & (1 << (i — 1))) и если есть, увеличиваем счётчик p на 1
- При каждой итерации, когда проходит 4 бита (16-я цифра имеет размер 4 бита), выводим количество найденных единиц (p) и сбрасываем счётчик p в 0
- После завершения цикла выводим результат на экран с помощью функции puts
- Завершаем программу и возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д