Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]обработка целых чисел


Автор: al_lex_ey 15.12.2007, 19:21
Мне нужно, чтобы программа выводила число в двоичном виде.
Подскажите, пожалуйста, как это сделать.

Автор: t_gran 18.12.2007, 04:37
Код

int dec2bin (const unsigned long inData)
{
   struct stBin                             // структура (стек) для хранения двоичного числа
   {
      bool data;                            // само число ("true"= 1, "false"= 0)
      stBin *next;                          // указатель на следующее число
   };
   unsigned long data= inData;              // Дублируем входное десятичное число
   stBin *bin= new stBin;                   // Объявляем переменную каторая и будет содержать 2-ое число
   bin->data= data % 2 ? true : false;      // Заносим первое значение (по правилу перевода числа с одной СИ в другую)
   bin->next= NULL;                         // Дно стека
   data= data / 2;                          // Изменяем значение исходного числа (по правилу перевода числа с одной СИ в другую)
   while (data)                             // До победного мучием дублированное число
   {
      stBin *node= new stBin;               // Создаем новый узел
      node->data= data % 2 ? true : false;  // Получаем значение (по правилу перевода числа с одной СИ в другую)
      node->next= bin;                      // Добавляем к созданному узлу все то, что уже накопилось
      bin= node;                            // Переприсваиваем, дублируем указатель (на узел) каторый стал верхом стека
      data= data / 2;                       // Изменяем значение исходного числа (по правилу перевода числа с одной СИ в другую)
   }
   while (bin)                              // Теперь вытаскиваем получившееся значения
   {
      printf ('%c', bin->data ? '1' : '0'); // Простой формат вывода
      stBin *node= bin;                     // Копируем указатель на верхний узел стека
      bin= bin->next;                       // Спускаемся на ухзел ниже
      delete node;                          // Убиваем нерадивый (ненужный), верхний узел
   }
   return 0;
}

Автор: orthrus 18.12.2007, 06:56
вот, работает через сдвиг влево:

Код

#include <iostream>

using namespace std;

int main(){
    unsigned long int i = 0xff0000ff; // обрабатываемое число
    while (i!=0) //пока число неравно 0 значит есть еденички
    {
        if ((i & 0x80000000) == 0x80000000) {cout << 1;} 
        else {cout << 0;}    
        i <<= 1; // сдвигаем число i на один разряд влево
    }
    return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)