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

Тема в разделе "C/C++/C#", создана пользователем Elanso, 27 дек 2010.

Статус темы:
Закрыта.
  1. Elanso

    Elanso Гость

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

    1ive Well-Known Member
    Web Team

    Регистрация:
    12 сен 2010
    Сообщения:
    694
    Симпатии:
    0
    Для перевода чисел из десятичной системы счисления в двоичную используют так называемый "алгоритм замещения", состоящий из следующей последовательности действий:

    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">
    Паскаль:
    Код (Text):
    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++:
    Код (Text):
    #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();
    }
     
  3. 1ive

    1ive Well-Known Member
    Web Team

    Регистрация:
    12 сен 2010
    Сообщения:
    694
    Симпатии:
    0
    подниму наверх чтоб ТС не потерял мой ответ (забили "строками" всю тему)
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей