Вывод двоичного представления целого десятичного числа
Вывести двоичное представление данного десятичного целого числа.
Код взят из темы на форуме.
Автор идеи: Cranium
Исходный код на языке C++
#include <cstdio>
#include <string>
//Сразу напишем общую версию для всех целочисленных типов
template <typename T>
std::string intToBin(T val) {
if (val == 0)
return "0"; //Здесь сработает конструктор std::string
//Буфер для записи двоичного представления
//Всего битов в числе sizeof(T) * 8, и ещё один на терминальный символ
char bary[sizeof(T) * 8 + 1];
//Индекс записи в буфер выше
int idigit = 0;
bool meetOne = false;
//Спускаемся от старшего к младшему биту
for (int i = sizeof(T) * 8 - 1; i >= 0; i--)
{
if (val & (T(1) << i)) //Если бит номер i установлен...
{
//...записываем 1 в соответствующий бит строкового представления
//и устанавливаем флаг встречи с 1
meetOne = true;
bary[idigit++] = '1';
}
else
{
//...записываем ноль, но только если до этого была единица,
//так избавимся от ненужных ведущих нулей
if (meetOne)
{
bary[idigit++] = '0';
}
}
}
//Завершение строки терминальным символом
bary[idigit] = '\0';
return bary; //Конструктор std::string
}
int main()
{
int val;
while (std::scanf("%d", &val) != EOF)
{
std::printf("%s ", intToBin(val).c_str());
}
return 0;
}