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

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

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2011, 20:30   #1
MiraJe
 
Регистрация: 10.01.2011
Сообщений: 5
По умолчанию Программа перевода числа из десятичного в двоичное.

Всем привет переводил свой номер мобильного телефона в двоичную систему по средством листка бумаги и ручки, гдето ошибся и решил написать програмку.
Набрасал код, но как это всегда бывает не компилируеться с первого раза.
Подскажите, где могу ошибаться, и вопрос: Таким образом вообше грамотно переовдить из 10-тичной в двоичную?

Код:
//Программа переводит десятичное число любой длины в двоичное
//и выводит результат на экран.
#include<iostream>
 using std::cin;
 using std::cout;
 using std::endl;
#include<math.h>
#include<string>
 using std::string;
main()
{
  cout<<"____________________________________________\n|Программа переведет ваше десятичное число |\n| в двоичное, и выведер результат на экран.|\n--------------------------------------------"<<endl;
  long int x=0;
  string r;
  cout<<" - Введите дисятичное число\n - -----> ";
  cin>>x;
  cout<<"Подсчет результата!\n     _______     "<<endl;
  while(x!=0){
   if((x mod 2)=0)
   { 
     x=x/2;
     r+=0;
   }
    else
      if((x mod 2)!=0)
      { 
	x=x div 2;
	r+=1;
      }
  }
  cout<<"Двоичный результат(Вам нужно записать задом на перед)\n"<<r<<endl;
  return 0;
}
MiraJe вне форума Ответить с цитированием
Старый 10.01.2011, 22:09   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
for (int i = 0; i < 32; i++)
  r = (x & (1 << i))? "1" : "0" + r;
как-то так.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 10.01.2011, 22:15   #3
MiraJe
 
Регистрация: 10.01.2011
Сообщений: 5
По умолчанию

Откомпилировалось с первого раза (Подозрительно!). В таком случае при любом значении он выдает либо 01 либо 31 нол и единицу. Не корректно работает.

Последний раз редактировалось MiraJe; 10.01.2011 в 22:21.
MiraJe вне форума Ответить с цитированием
Старый 10.01.2011, 23:06   #4
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Код:
#include <iostream>

int main()
{
	long long int i;
	int value;

	std::cout << "Введите число для преобразования в двоичное представление: ";
	std::cin >> value;
	std::cout << "\nРезультат: ";

	for (i = 31; i >= 0; i--) 
        {
		if ((1 << i) & value) 
                {
			std::cout << "1";
		}
		else
		{
			std::cout << "0";
		}
	}

	std::cout << std::endl;

	return 0;
}

Последний раз редактировалось oleg kutkov; 10.01.2011 в 23:09.
oleg kutkov вне форума Ответить с цитированием
Старый 10.01.2011, 23:49   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от MiraJe Посмотреть сообщение
Не корректно работает.
Ну забыл скобочки, с кем не бывает ) Я компилировал и прогонял в уме, сорри, надо было проверить перед постингом.

Кстати, не каждый телефонный номер влезет в 32 бита. х лучше объявить как 64 битную переменную. Вот исправленный универсальный вариант:

Код:
for (int i = 0; i < sizeof(x) << 3; i++)
		r = ((x & (1 << i))? "1" : "0") + r;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 10.01.2011 в 23:55.
veniside вне форума Ответить с цитированием
Старый 11.01.2011, 17:10   #6
MiraJe
 
Регистрация: 10.01.2011
Сообщений: 5
По умолчанию

Спасибо, за помощь.
MiraJe вне форума Ответить с цитированием
Старый 16.01.2011, 01:09   #7
mojohead
Пользователь
 
Регистрация: 10.01.2011
Сообщений: 79
По умолчанию

как в данном случае обяснить строку
Цитата:
Сообщение от oleg kutkov Посмотреть сообщение
Код:
if ((1 << i) & value)
mojohead вне форума Ответить с цитированием
Старый 16.01.2011, 14:11   #8
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

Цитата:
if ((1 << i) & value)
сдвигаю двоичный код числа один на i разрядов в лево (те 1 << 1 будет 10; 1 << 2 будет 100 и т.д.) далее сравниваем двоичный код полученного числа с двоичным кодом value если есть хоть одна единичка имеющая одинаковый разряд и там и там то true если нет то false
ololo-schoolboy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод числа из десятичного представления в двоичное на Си Kastet14 Помощь студентам 11 29.04.2016 16:49
Вывод десятичного числа, макросом valerij Microsoft Office Excel 5 27.07.2010 22:16
Программа перевода числа из 10 СС в 2 СС fs444 Общие вопросы C/C++ 12 25.02.2010 08:10
Преобразование десятичного числа в двоичное. Quize Паскаль, Turbo Pascal, PascalABC.NET 4 12.04.2008 16:09
C++. Перевод десятичного числа в двоичное Panterka Помощь студентам 15 12.12.2007 15:04