Перевод десятичного числа в двоичное на VC++

4 ноября 2009

Перевод из десятичной системы в двоичную

Ответ на этот вопрос мы и рассмотрим в этой статье. Мы будем использовать всем известный метод, нахождения двоичного представления десятичного числа – деление числа на 2. Все эти преобразования будут находиться в процедуре “Dec2Bin(int ch)”, где “ch”- число в десятичном представлении, которое собственно мы будем декодировать в двоичное.

Как преобразовать десятичное число в двоичный вид на VC++?

До всего прочего нужно сначала объявить переменную “n” как константу: “const int n = 32;” Она отвечает за размерность массива “s[n]”, в который будет помещаться двоичное представление числа.
И так, давайте рассмотрим процедуру “Dec2Bin(int ch)”, которая будет преобразовать десятичное число в двоичный вид. Что в этой процедуре мы делаем?

Наше число в 10-м виде делим на 2 с остатком и если при делении получается число с остатком, то в i-й элемент массива “s[i]” мы записываем число 1, в противном случае записываем 0. Этому числу “ch” приравниваем значение равное “ch”деленное на 2, эти действия выполняются пока число “ch” не будут равно нулю.

Дальше проверяем, если наше 10-е число отрицательное инвертируем значения массива “s[n]”, т.е. число 1 заменяем на 0 и число 0 на 1. Это правило распространяется только на отрицательные числа. Затем приводим наш массив “s[n]” в нормальный вид, инвертируя значения до тех пор, пока ни встретится значение равное 0. В конце концов, прогоняя массив по циклу “for” выводим двоичное представление числа в 10-м виде. Вот и все, теперь посмотрите, что получилось:

Процедура “Dec2Bin(int ch)” -Перевод из десятичной системы в двоичную

void Dec2Bin(int ch)
{
	int i, ch2, s[n];
	ch2 = ch;
	for (i = 0; i < n; i++)
	s[i] = 0;
	for (i = 0; ch != 0; i++)
	{
		s[i] = abs(ch) % 2; //текущему значению массива s присваиваем 1 или 0
		ch = abs(ch) / 2;
	}
	if (ch2 < 0)
	{
		for (i = n - 1; i >= 0; i--)
			if (s[i] == 1)
				s[i] = 0;
			else
				s[i] = 1;
	}
	for (i = 0; i < n; i++)
		if (s[i] == 1)
			s[i] = 0;
		else
		{
			s[i] = 1;
			break;
		}
	wcout << L"Двоичное представление :" << endl;
	for (i = n - 1; i >= 0; i--) //цикл вывода массива с введенным числом
		cout << s[i]; //представленным в двоичной системе счисления
}

Число в 2-м виде получили, но разве вам не хочется декодировать его обратно? Для начала напишем функции возведения числа в степень и получения длины массива, они нам понадобятся.

Функция “len(char str[])”:

int len(char str[])
{
	int i = 0;
	while (str[i] != 0)
		i++;
	return i-1;
}

Функция “stepen(int ch, int st)”:

int stepen(int ch, int st)
{
	int a = 1;
	for(int i = 0; i < st; i++)
		a *= ch;
	return a;
}

Функция “len(char str[])” возвращает длину массива “str[]”, а “stepen(int ch, int st)” возводит число 2 в степень “st”.

Перевод из двоичной системы в десятичную

Теперь рассмотрим функцию “Bin2Dec (char m[])”, где “m[]”- это есть массив двоичных данных, в которых спрятано число. Если первый символ в массиве равен ‘1’, т.е. наше число отрицательное, то каждый символ в массиве до первой найденной ‘1’ инвертируем и после этого снова выполняет замену всех символов массива на ‘0’, если этот символ это ‘1’ или на ‘1’ соответственно. Затем непосредственно выполняем перевод в 10-й вид, используя нашу функцию возведения в степень. Код приведен ниже:

Функция “Bin2Dec (char m[])” - Перевод из двоичной системы в десятичную

int Bin2Dec (char m[])
{
	int i, deca=0, j = 0, q = 1;
	if (m[0] == '1')
	{
		for (i = n - 1; i >= 0; i--)
			if (m[i] == '0')
				m[i] = '1';
			else
			{
				m[i] = '0';
				break;
			}
		for (i = 0; i < n; i++)
			if (m[i] == '1')
				m[i] = '0';
			else
				m[i] = '1';
		q*=-1;
	}
	for (i = n - 1; i >= 0; i--, j++)
		if(m[i] == '1')
			deca += stepen(2,j);
	return deca*q;
}

Ну и, наконец, главная функция, с которой начинается работа нашего приложения. Здесь происходит ввод данных и вывод результата работы программы на экран пользователя.

Главный метод:

int main()
{
	wcout.imbue(locale("rus_rus.866"));
	int ch;
	char c[n];
	wcout << L"Введите число (десятичное):" << endl; //вывод сообщения на экран
	cin >> ch; //ввод значения с клавиатуры
	Dec2Bin(ch);
	/*------------------------------------------------------------------------*/
	wcout << L"\n\nВведите число (двоичное):" << endl; //вывод сообщения на экран
	cin>>c; //ввод значения с клавиатуры
	wcout << L"Десятичное представление :" << endl << Bin2Dec(c) << endl; //выводим на экран число в 10-й системе счисления
	system("pause");
	return 1;
}

Используя данное приложение, вы с легкостью сможете переводить числа из десятичной системы счисления в двоичный вид и, наоборот, из двоичной системы счисления в десятичный вид. Желаю вам удачи!

Автор: Евтеев Евгений Александрович
Email: [email protected]