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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2009, 16:44   #1
Paul_AG
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 152
Смущение Преобразование из 10значной систмы в 2 значную

Уважаемые програмисты в коледже задали задачу сделать преобразование из 10 значной систмы в 2 значную.Подскажите плиз чтото я совсем запутался...вот набросил кусок кода а как далше...знаю что нужен цыкл который каждый рз будет делить число на два и сверять с остатком от деления...и помещать данные в массив.идею я знаю а вот с реалезачией...подскажите если не сложно.
Paul_AG вне форума Ответить с цитированием
Старый 22.09.2009, 16:49   #2
Paul_AG
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 152
По умолчанию

Вот мой набросок кода.
Код:

#include <iostream>
using namespace std;
int main()

{
    int n,n2,arr[9];
    n2 = 2;
               cin >> n;
                     
if( n % n2 == 0) {
                   n = 0;                  
}

else {
        n = 1;
      
}
 
    cout << n;
    cin.get();    
}
Paul_AG вне форума Ответить с цитированием
Старый 22.09.2009, 16:56   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Самое простое - использовать функции atoi (если исходное число хранится как строка десятичных цифр) и itoa с указанием системы счисления.

Если исходное число хранится в int, то можно так:

Код:
int n = 123;
for (int i=31; i>=0; i--)
{
    if ((n>>i) & 1) // i-й бит с конца равен 1?
        cout << '1';
    else
        cout << '0';
}

Последний раз редактировалось ds.Dante; 22.09.2009 в 17:04.
ds.Dante вне форума Ответить с цитированием
Старый 22.09.2009, 19:42   #4
Paul_AG
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 152
По умолчанию

Извините.не могли бы вы немного поподробней объяснить...
Paul_AG вне форума Ответить с цитированием
Старый 23.09.2009, 11:12   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

1-й вариант.

Если исходное значение хранится в строке:
Код:
#include <stdlib.h>

void main()
{
	char str[64] = "123";
	int n = atoi (str);
	itoa (n, str, 2);
}
А если в int:
Код:
#include <stdlib.h>

void main()
{
	int n = 123;
	itoa (n, str, 2);
}

2-й вариант.
Код:
void main()
{
	char str[64];   // строка с двоичным представлением числа
	int n = 123;    // само число
	int i=0;          // указатель на текущий символ в строке

	while (n!=0)   // пока от исходного числа хоть что-то еще осталось
	{
		if (n%2 == 1)          // если остаток от деления был бы 1
			str[i] = '1';
		else
			str[i] = '0';

		n /= 2;  // делим пополам
		i++;      // и переходим к следущему символу
	}

	str[i] = 0;  // завершаем строку нулем (чтобы была нормальная строка ASCIIZ)
}
Минус - строка будет задом наперед (начиная с младших битов)


3-й вариант.
Число 123 хранится в памяти как двоичное 1111011. Используя двоичные операции >> (сместить биты вправо) и & (побитовое И) можно вычленить каждый бит. Фактически то же, что и предыдущее, но с другой точки зрения.
Код:
void main()
{
	char str[64];
	int n = 123;

	for (int i=0; i<32; i++)
	{
		if (n & 1) // младший бит равен 1? (аналогично n%2)
			str[31-i] = '1'; // чтобы биты шли в привычном порядке, записываем их в обратном ([31-i])
		else
			str[31-i] = '0';
		n >>= 1; // смещаем биты вправо (аналогично n/=2)
	}

	str[32] = 0; // завершаем строку нулем
}
ds.Dante вне форума Ответить с цитированием
Старый 23.09.2009, 18:02   #6
Paul_AG
Форумчанин
 
Регистрация: 16.03.2009
Сообщений: 152
По умолчанию

Спасбо большое)))
Paul_AG вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
преобразование даты kate158 SQL, базы данных 1 19.08.2009 12:00
Преобразование матриц bpystep Помощь студентам 8 23.03.2009 12:54
преобразование типов в Си HoOpe Помощь студентам 5 11.03.2009 21:58
Преобразование координат HunterMan Общие вопросы .NET 1 22.12.2008 15:03
Преобразование... prizrak1390 Общие вопросы Delphi 2 02.04.2008 11:24