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

  • Автор темы Elanso
  • Дата начала
Статус
Закрыто для дальнейших ответов.
E

Elanso

#1
Помогите написать функцию для перевода числа с десятичной системы в двоичную
 

1ive

Well-known member
12.09.2010
621
1
#2
Для перевода чисел из десятичной системы счисления в двоичную используют так называемый "алгоритм замещения", состоящий из следующей последовательности действий:

1.Делим десятичное число А на 2. Частное Q запоминаем для следующего шага, а остаток a записываем как младший бит двоичного числа.
2.Если частное q не равно 0, принимаем его за новое делимое и повторяем процедуру, описанную в шаге 1. Каждый новый остаток (0 или 1) записывается в разряды двоичного числа в направлении от младшего бита к старшему.
3.Алгоритм продолжается до тех пор, пока в результате выполнения шагов 1 и 2 не получится частное Q = 0 и остаток a = 1.


Лентяй


<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Пример</div></div><div class="sp-body"><div class="sp-content">
Например, требуется перевести десятичное число 247 в двоичное. В соответствии с приведенным алгоритмом получим:

247[sub]10[/sub] : 2 = 123[sub]10[/sub]
247[sub]10[/sub] - 246[sub]10[/sub] = 1, остаток 1 записываем в МБ двоичного числа.

123[sub]10[/sub] : 2 = 61[sub]10[/sub]
123[sub]10[/sub] - 122[sub]10[/sub] = 1, остаток 1 записываем в следующий после МБ разряд двоичного числа.

61[sub]10[/sub] : 2 = 30[sub]10[/sub]
61[sub]10[/sub] - 60[sub]10[/sub] = 1, остаток 1 записываем в старший разряд двоичного числа.

30[sub]10[/sub] : 2 = 15[sub]10[/sub]
30[sub]10[/sub] - 30[sub]10[/sub] = 0, остаток 0 записываем в старший разряд двоичного числа.

15[sub]10[/sub] : 2 = 7[sub]10[/sub]
15[sub]10[/sub] - 14[sub]10[/sub] = 1, остаток 1 записываем в старший разряд двоичного числа.

7[sub]10[/sub] : 2 = 3[sub]10[/sub]
7[sub]10[/sub] - 6[sub]10[/sub] = 1, остаток 1 записываем в старший разряд двоичного числа.

3[sub]10[/sub] : 2 = 1[sub]10[/sub]
3[sub]10[/sub] - 2[sub]10 [/sub] = 1, остаток 1 записываем в старший разряд двоичного числа.

1[sub]10[/sub] : 2 = 0[sub]10[/sub], остаток 1 записываем в старший разряд двоичного числа.

Таким образом, искомое двоичное число равно 11110111[sub]2[/sub]


Варианты на разных языках:
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Паскаль</div></div><div class="sp-body"><div class="sp-content">
Паскаль:
Код:
VAR
x:WORD;
i,p:INTEGER;

function Pow_2(n:WORD):WORD;
Var i,Y:WORD;
BEGIN
IF n=0 THEN Pow_2:=1 ELSE
IF n=1 THEN Pow_2:=2 ELSE
BEGIN
Y:=2;
FOR i:=2 TO n DO Y:=Y*2;
Pow_2:=Y;
END;
END;

BEGIN
Write('Enter the number '); ReadLn(x);
p:=-1;
REPEAT
INC(p);
UNTIL (x div Pow_2(p))<2;
FOR i:=p DOWNTO 0 DO
BEGIN
Write(x div Pow_2(i));
x:=x mod Pow_2(i);
END;
ReadLn;
END.
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">C/C++</div></div><div class="sp-body"><div class="sp-content">С/C++:
Код:
#include <stdio.h>  
#include <conio.h>  
#include <math.h>  

void dvoich(int x1)  
{ 
int i, b; 
long c = 0; 
for(i=0;x1 > 0;i++) 
{
b = x1 % 2; 
x1 = (x1-b)/2;
c += b * pow(10,i);
}

printf("\nDvoichnoe chislo: %d",c);  
}  

void main()  
{
int a; 
printf("Vvedite desyatichnoe chislo:"); 
scanf("%d",&a); 
dvoich(a); 
getch(); 
}
 
Симпатии: Понравилось Elvin

1ive

Well-known member
12.09.2010
621
1
#3
подниму наверх чтоб ТС не потерял мой ответ (забили "строками" всю тему)
 
Статус
Закрыто для дальнейших ответов.