2015-02-23 103 views
0

我正在写一个简单的程序来将整数(0和2147483647之间)转换为32位二进制。将整数转换为32位二进制 - 输出反向

不幸的是,输出是回来了。例如,而不是2 = 10,我得到2 = 01

#include<stdio.h> 

int main() 
{ 
    int finishFlag = 0; //0 = false, 1 = true 

    while (finishFlag != 1) 
    { 
     int a[36], 
      n = 0, 
      i = 0, j = 0; 

     printf("Enter a number between 0 and 2147483647: "); 
     scanf("%d", &n); 

     if (n > 0 && n <= 2147483647) 
     { 
      printf("%d expressed as a 32-bit binary number is: ", n); 

      for (i = 0; i < 36; i++) 
      { 
       if (n == 1) 
       { 
        a[i] = 1; 
        break; 
       } 
       else 
       { 
        a[i] = n % 2; 
        n = n/2; 
       } 
      } 
      for (j = 0; j <= i; j++) 
      { 
       printf("%d", a[j]); 
      } 
      printf("\n"); 
      finishFlag = 1; 
     } 
     else 
      printf("\n** Not a valid input, try again ***\n"); 
    } 
    return 0; 
} 

此外,我将如何显示0的其余部分(包括每第8个数字之间的空格)?我需要输出看起来像这样的整数'2'

00000000 00000000 00000000 00000010 
+1

@immibis:我敢肯定Goush知道这一点。 – 2015-02-23 20:51:11

+0

@ScottHunter你会惊讶有多少人不会。 – immibis 2015-02-23 20:52:17

+0

@immibis:然而,他/她发布了一个问题,询问如何解决这个问题。知道存在问题并知道如何解决它(或者为什么你的代码没有说出你的想法)是有区别的。 – 2015-02-23 22:02:07

回答

2

您已经单独打印数字;只需j开始于i并计数下降为0.至于打印空间:找出哪些值为i您需要一个空间,测试它们,然后打印一个。

+0

嘿,谢谢。有效!不再向后输出。非常感谢! – Goush 2015-02-23 21:02:32

+0

摆脱测试'if(n == 1)'并循环32次,而不是36!你为什么拒绝'0'作为输入? – chqrlie 2015-02-23 21:07:24

1

那么基本转换算法会首先产生较低的数字,所以您必须将结果反转以便按照正常的读取顺序显示它们。

的一种方式做到这一点:

void print_in_base (int value, int base) 
{ 
    char digit[MAX_DIGITS]; 

    // compute digits 
    int rank = 0; 
    while (value != 0) 
    { 
     digit[rank++] = '0' + value % base; 
     value /= base; 
    } 

    // display digits in reverse order 
    while (rank--) printf ("%c", digit[rank]); 
} 

现在,如果你想插入空格每n个字符,你可以做这样的事情:

void print_in_base (int value, int base, int spacing) 
{ 
    char digit[MAX_DIGITS]; 
    int rank = 0; 
    while (value != 0) 
    { 
     digit[rank++] = '0' + value % base; 
     value /= base; 
    } 
    while (rank--) 
    { 
     printf ("%c", digit[rank]); 
     if (rank % spacing == 0 && rank != 0) printf (" "); 
    } 
}