Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > перевод в двоичную систему.


Автор: Prokazza 30.4.2007, 23:59
покажите плз как переводить число в двоичную систему.
вернее как его переводить в с++  smile 
нашел темы про 10тичные. у меня была идея записать как деления дробью.
т.е. число делиться на два и при деление на два можно умножить только 1
а как ноль в остаток запихнуть недоперло. по формуле там гемар со степенями.
может как то проще можно а я незнаю.  smile 

Автор: Prokazza 1.5.2007, 00:26
спачибо... но можно болие понятно ? *на пальцах так сказать*  smile 

Автор: Xenon 1.5.2007, 00:32
Из 10чной в 2чную?
Код

int binary(int num, int buf = 0, int digit = 1)
{
    if (num <= 0) return buf;
    buf += (num % 2) * digit;
    binary( num /= 2, buf, digit *= 10);
}

int main(int argc, char* argv[])
{
    int num = 20;
    int buf = num;
    std::cout << binary(num);
    std::cin.sync();
    std::cin.get();
    return 0;
}

Автор: Prokazza 1.5.2007, 00:49
нет )))
просто число любое простое число в двоичную =)

Автор: Xenon 1.5.2007, 00:51
Prokazza, а у сложные какие-то числа что ли? smile Простые числа, в твоем понимани, и есть 10чные - 5,6,2452345,7,4? 

Автор: Prokazza 1.5.2007, 01:00
ну в принцапи да ) точно у нас же (у человеков) 10тичная система исчисленяи )
т.е. твой код число человеческое 91отчное) переводит в двоичную?

Автор: Xenon 1.5.2007, 01:14
Из человеческого десятичного, в машинное и страшное двоичное smile

Автор: dizzy1984 1.5.2007, 08:04
Код

int i;
char buf[256];
itoa(i,buf,2);
printf ("binary: %s",buf);

Автор: Voldemar2004 1.5.2007, 16:45
Цитата(Prokazza @  1.5.2007,  00:59 Найти цитируемый пост)
покажите плз как переводить число в двоичную систему.
Так:
Код
#include <iostream.h>
#include <string.h>

string IntToBin(int Number);

int main()
{

int i;

cin >> i;

cin.get();

cout << IntToBin(i);

cin.get();

return 0;
}


string IntToBin(int Number) {

string buf;

    do
    {
        if (Number % 2 == 0) buf += '0';
        else buf += '1';

        Number /= 2;
    }
    while( Number > 0 );

    return strrev( (char*)buf.c_str() );

}

Автор: ip127001 1.5.2007, 20:46
вот дела когда-то...велосипед правда
Код

#include <stdlib.h>
#include<iostream.h>
#include<string>
#include <conio.h>
//---------------------------------------------------------------------------

int Stepen(int chislo=0,int stepen=0)
{
        int step=1, tmp=chislo;
                while (step<stepen)
                {
                        chislo=chislo*tmp;
                        step++;
                }
        return chislo;
}

int func(const char *chislo=0,int size=0)
{
        int *mas=new int[size];
        unsigned int result=0;
        int step=1,i=size-1;
                for (register int i=0;i<size;i++)  mas[i]=chislo[i]-'0';
                if (mas[i]==1){
                        result=1;
                        i-=1;
                        size--;
                }else{
                        result=0;
                        i-=1;
                        size--;
                }
                        while (size)
                        {

                                result=result+mas[i]*Stepen(2,step);
                                i--;
                                size--;
                                step++;
                        }
        delete[] mas;
        return result;
}

int main(int argc, char* argv[])
{
    unsigned int number = 0;
    char str[25];
    string bin_chislo;

        cout<<"Input number: ";
        cin>>bin_chislo;
                for (register string::size_type i=0;i<bin_chislo.size();i++)
                {
                        if ((bin_chislo[i]!='0') && (bin_chislo[i]!='1')){
                                cerr<<"Error : "
                                    <<"System of the numeration does not correspond!";
                                getch();
                                return -1;
                                }
                }
        number=func(bin_chislo.c_str(),bin_chislo.size());
        itoa(number, str, 16);

        cout<< "Dec = "<<number<<endl;
        cout<< "Hex = "<<str<<endl;

        getch();
        return 0;

}

упс пардон...тут наоборот...ну лан мож кому пригодиться 

Автор: FiMa1 2.5.2007, 15:53
Код

/***************************************************************
* ОПИСАНИЕ:                                                    *
*   переводит целые десятичные числа в СС с основанием 2 - 36  *
* ВХОД:                                                        *
*   num - число для перевода в другую систему счисления        *
*   radix - основание системы счисления                        *
*   str - строка, в которую помещается результат               *
* ВЫХОД:                                                       *
*   при успешном завершении возвращает 1, иначе - 0            *
****************************************************************/
int scale( int num, char *str, const int radix )
{
    int    priv = 0, i = 1;
    
    if( radix < 2 || radix > 36 || radix == 10 )
        return 0;
    
    while( 1 )
    {
        if( num >= radix )
        {
            priv = num / radix;//найти частное
            str[i++] = num - priv * radix;//найти остаток от деления
            num = priv;
        }
        else 
        {
            *str = priv;
            break;
        }
    }

    for( i -= 1; i >= 0; i-- )
        if( str[i] >= 10 )
            str[i] = (char)( str[i] - 10 + 'A' );
    
    return 1;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)