#include <stdio.h>
#include <stdlib.h>
// Преобразует число num в бинарную строку str.
// Если str==NULL то просто возвращает требуемый размер строки.
// Иначе еще и заполняет эту строку двоичным представлением числа.
unsigned int uint2bin(unsigned int num, char* const str)
{
unsigned int count = 0;
asm(
"mov $1,%%eax;"
"mov %%edx,%%ebx;"
"l1:inc %%eax;"
"shr $1,%%ebx;"
"jnz l1;"
"test %%esi,%%esi;"
"jz exit;"
"lea -1(%%esi,%%eax),%%esi;"
"movb $0,(%%esi);"
"l2:dec %%esi;"
"mov %%edx,%%ebx;"
"and $1,%%ebx;"
"add $48,%%ebx;"
"movb %%bl,(%%esi);"
"shr $1,%%edx;"
"jnz l2;"
"exit:"
: "=a"(count)
: "d"(num), "S"(str)
: "ebx");
return count;
}
int main()
{
unsigned int num;
printf("Введите число:");
scanf("%u", &num);
char* binstr = (char*) malloc(uint2bin(num, 0));
uint2bin(num, binstr);
printf("uint2bin(%u)=%s\n", num, binstr);
free(binstr);
return EXIT_SUCCESS;
}
Введите число:65536
uint2bin(65536)=10000000000000000
Введите число:10
uint2bin(10)=1010
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.