我想開發一個轉置函數,它可以從十進制轉換爲二進制最多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");
}
}
我想開發一個轉置函數,它可以從十進制轉換爲二進制最多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");
}
}
而不是使用算術運算,你可以使用按位運算,並獲得直接的數字:
for (c = 31; c >= 0; --c)
{
printf("%d", (n >> c) & 1);
}
這一權利c
的換檔在n
價值,即把位數c
在最右邊的(最不重要)位。然後與1
掩碼將導致一個或一個零,然後打印。
調試程序爲n = 5
:
當c
變得5
,1
得到印刷後26 0
的
000000000000000000000000001
現在的c
(直到0
)休息時,輸出爲
00000000000000000000000000100000
,不幸的是這不是十進制的5
。希望你明白你做錯了什麼。
您正在檢查數字n是否可以被所有數字31整除0.這不是您需要做的轉換基地。 凡十進制表示顯示了一個數,例如,6174(kapreka常數) 作爲能夠建立這些塊組成:
4 * 10^0
7 * 10^1
1 * 10^3
6 * 10^4
0 * ..
0 * ..
你會希望你的轉置功能導致2的冪表示。我希望這有助於指導你的答案。
#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);
}
+1爲小說'「01」[x&1]'。 – chux
你不更新'n',它應該是'n = n/2',順便說一句,你應該反向打印。 –
這不是換位,也不是輸入小數。這是用二進制打印一個數字。 –
提示:設置位31並不意味着數字可以被31整除。您應該多讀一些關於二進制表示和位運算符的內容。 – molbdnilo