2015-02-23 133 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 (" "); 
    } 
}