2012-06-16 3 views
-1

Я конвертирую номер int в двоичный код, но мне нужно подписать расширение до 16 бит f, двоичный код равен 011, то есть мне нужно распечатать его в 0000000000000011. У меня также есть проблемы в оценке двоичного кода отрицательного числа, если это больше, чем 7.Расширение знака до 16 бит

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
#include <stdlib.h> 

void main() 
{ 
    int x; 
    char inst[4][15]={"addi","8"}; 

    int rem, num=0, i=1; 
    int y; 
    int num1 = atoi(inst[1]); 
    if (num1 < 0) 
    { 
     x=atoi(inst[1]); 
     x = (x * -1) -1;    
     printf("x %d",x); 
     while(x > 0) 
     { 
      rem = x % 2; 
      x= x/2; 
      num = (rem * i)+num; 
      i = i * 10; 
      y = num^111; 
     } 
     printf("binary no: %d",y); 
    } 
    else 
    { 
     x = atoi(inst[1]); 
     while(x > 0) 
     {   
      rem = x % 2; 
      x = x/2; 
      num = (rem * i) + num; 
      i = i * 10; 
     } 
     printf("binary no: %d", num); 
    } 
} 
+0

Так что же делать выше код? –

+0

@SherineShafei В вашем коде столько избыточности ... –

+0

этот код принимает int-номер внутри строки, преобразует в целое число, а затем в двоичный номер. Мне нужно расширить это двоичное число до 16 бит –

ответ

0

Вот мой код для 32-битных integer.Will это даст вам подсказку.

1 #include <stdio.h> 
    2 #include <stdlib.h> 
    3 
    4 int 
    5 main(void) 
    6 { 
    7  const char set[] = {'0', '1'}; 
    8  int number; 
    9  unsigned int unumber, tmp; 
10  int i, loop; 
11  char * output, * cpy; 
12 
13 
14  scanf("%d", &number); 
15  unumber = (unsigned int)number; 
16 
17  loop = sizeof(unsigned int) * 8; 
18  output = malloc(loop + 1); 
19  cpy = output + loop; 
20  *cpy = '\0'; 
21  cpy--; 
22 
23  for(i = 0; i < loop; i++) 
24   *cpy-- = set[(unumber >> i & 1)]; 
25 
26 
27  printf("%s\n", output); 
28  free(output); 
29 
30  return 0; 
31 } 
32 

пример ввод и вывод:

10 
00000000000000000000000000001010 
-1 
11111111111111111111111111111111 
Смежные вопросы