2014-02-06 48 views
0

我想開發一個轉置函數,它可以從十進制轉換爲二進制最多9位數字。我在編碼方面很新,這是我的第一次嘗試。但它似乎並沒有工作,對不起,如果我問一些明顯的事情,但我需要一些幫助。提前致謝。移調函數,十進制到二進制

void transpose(int n) 

{ 
int c, k; 
for (c = 31; c >= 0; c--) 
{ 
k = (n % c); 


if (k == 0) printf("1"); 
else printf("0"); 
} 
} 
+0

你不更新'n',它應該是'n = n/2',順便說一句,你應該反向打印。 –

+0

這不是換位,也不是輸入小數。這是用二進制打印一個數字。 –

+0

提示:設置位31並不意味着數字可以被31整除。您應該多讀一些關於二進制表示和位運算符的內容。 – molbdnilo

回答

3

而不是使用算術運算,你可以使用按位運算,並獲得直接的數字:

for (c = 31; c >= 0; --c) 
{ 
    printf("%d", (n >> c) & 1); 
} 

這一權利c的換檔在n價值,即把位數c在最右邊的(最不重要)位。然後與1掩碼將導致一個或一個零,然後打印。

0

調試程序爲n = 5
c變得51得到印刷後26 0

000000000000000000000000001 

現在的c(直到0)休息時,輸出爲

00000000000000000000000000100000 

,不幸的是這不是十進制的5。希望你明白你做錯了什麼。

0

您正在檢查數字n是否可以被所有數字31整除0.這不是您需要做的轉換基地。 凡十進制表示顯示了一個數,例如,6174(kapreka常數) 作爲能夠建立這些塊組成:

4 * 10^0

7 * 10^1

1 * 10^3

6 * 10^4

0 * ..

0 * ..

你會希望你的轉置功能導致2的冪表示。我希望這有助於指導你的答案。

1
#include <stdio.h> 
#include <limits.h> 

void transpose(int n){ 
    unsigned x; 
    char bits[CHAR_BIT * sizeof(n)+1]; 
    char *p = bits + CHAR_BIT * sizeof(n); 
    *p = '\0'; 
    for(x=n; p!=bits ;x>>=1) 
     *--p = "01"[x & 1]; 
    puts(bits); 
} 
+0

+1爲小說'「01」[x&1]'。 – chux