LINUX.ORG.RU

10 to 01


0

0

hello! Сижу себе и учу добренький язык "С", всё вроде идет своим чередом (возникают проблемы вопросы идеи).

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

1. Как перевести десятичное число в двоичное ручками?

2. Как зделать это с помщю функции.

снучало я подумал что пойдет нечто такое : printf("%2" chislo);

Vot i vse.

ne2

anonymous

char* Dec2Bin(int input)
{
   char* output=new char[64];
   int pos=0;
   do
   {
     if(input%2) output[pos++]='1';
     else output[pos++]='0';
     input = input/2;
   }
   while(input>0);
   output[pos]='\0';
   return output;
}
эта ф-ция вернет тебе строку с числом в двоичной системе
только задом наперед, так что перед тем как его использовать
надо его перевернуть (11001->10011).
Успехов))
DeX

anonymous
()

#include <stdio.h>


char* num2Bin(unsigned num)
{
    static char buf[33];
    char *c = buf + 32;
    *c = 0;
    do {
        if (num & 1)
            *(--c) = '1';
        else
            *(--c) = '0';
        num = num >> 1;
    } while (num);
    return c;
}


int main(int argc, char *argv[])
{
    printf("%s\n", num2Bin(15));
    return 0;
}

asso_w
()
Ответ на: комментарий от asso_w

Протормозил, if там лишний:

#include <stdio.h>

char* num2Bin(unsigned num) { static char buf[33]; char *c = buf + 32; *c = 0; do { *(--c) = '0' + (num & 1); num = num >> 1; } while (num); return c; }

int main(int argc, char *argv[]) { printf("%s\n", num2Bin(10)); return 0; }

asso_w
()
Ответ на: комментарий от anonymous

> #define DEC2BIN(v)\ 
{ int i;for(i=sizeof(v)*8-1;i>=0;i--) {printf("%.1d",(v>>i)&0x1);}

Тут не хватает фигурной скобки и выводятся все лидирующие нули.
С лидирующим нулем и printf можно сделать еще проще если
использовать рекурсию:

#include <stdio.h>


void dec2bin(int num)
{
    if (num)
        dec2bin(num >> 1);
    printf("%d", num & 1);
}

int main(int argc, char *argv[])
{
    dec2bin(6);
    printf("\n");
    return 0;
}

asso_w
()
Ответ на: комментарий от asso_w

Ну раз рекурсией и с "левым" нулем - это проще, тогда давай так: char* DEC2BIN[]={"0","1","10","11","100&q uot;,"101","110","111",...}; printf("%s\n",DEC2BIN[6]);

надеюсь, "тонкий" намек понял...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.