簡體   English   中英

將十進制數轉換為二進制數

[英]converting decimal number to binaric

我寫了一個將十進制整數轉換為二進制的代碼。 我試圖讓它打印所有數字,直到給出的數字,而不是每次打印完全相同的數字。 例如,對於 input = 3,它將以二進制形式打印 0,1,2,3。 這是我的代碼:

printf("Please enter an integer number\n");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
    printf("%d ==   ", n);

    for (c = 5; c >= 0; c--)
    {
        k = n >> c;

        if (k & 1)
            printf("1");
        else
            printf("0");
    }

    printf("\n");
}
system ("pause");
return 0;

謝謝你們!

你需要在循環中使用 i,而不是 n

#include "stdio.h"



int main()
{
    int c,k,n,i = 0;
    printf("Please enter an integer number\n");
    scanf_s("%d", &n);
    for (i = 0; i < n; i++)
    {
        printf("%d ==   ", i);

        for (c = 5; c >= 0; c--)
        {
            k = i >> c;

            if (k & 1)
                printf("1");
            else
                printf("0");
        }

        printf("\n");
    }

    return 0;
}

您也可以簡單地使用putchar()輸出單個字符,無需調用可變參數printf來輸出格式字符串中的固定字符(盡管一個好的編譯器可能會為您進行優化。

你可以做類似的事情:

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

int main (void) {

    unsigned n;
    fputs ("enter an integer number: ", stdout);
    if (scanf ("%u", &n) == 1) {
        for (unsigned i = 0; i < n; i++) {
            printf ("%d ==   ", i);
            for (unsigned s = 0; s < sizeof s * CHAR_BIT; s++)
                putchar ((i >> (31 - s)) & 1u ? '1' : '0');
            putchar ('\n');
        }
    }
}

示例使用/輸出

$ ./bin/binslessthann
enter an integer number: 10
0 ==   00000000000000000000000000000000
1 ==   00000000000000000000000000000001
2 ==   00000000000000000000000000000010
3 ==   00000000000000000000000000000011
4 ==   00000000000000000000000000000100
5 ==   00000000000000000000000000000101
6 ==   00000000000000000000000000000110
7 ==   00000000000000000000000000000111
8 ==   00000000000000000000000000001000
9 ==   00000000000000000000000000001001

(當然,對於小數來說,不需要完整的 32 位,但為了完整起見,它們被包含在內)

未填充的二進制表示

如評論中所述,未填充的版本使結果更易於閱讀。 (引用是“可怕的前導零”)要輸出未填充的版本,您可以簡單地先檢查值是否為零,如果是,則簡單地輸出零,對於存在一個位的值,您檢查值中是否保留了一個位移位后,如果是,繼續輸出位,否則不再輸出任何內容,例如

int main (void) {

    unsigned n;
    fputs ("enter an integer number: ", stdout);
    if (scanf ("%u", &n) == 1) {
        for (unsigned i = 0; i < n; i++) {
            printf ("%d ==   ", i);
            if (!i)
                putchar ('0');
            else {
                unsigned s = sizeof s * CHAR_BIT;
                while (s--) {
                    unsigned remain = i >> s;
                    if (remain)
                        putchar ((i >> s) & 1u ? '1' : '0');
                }
            }
            putchar ('\n');
        }
    }
}

示例使用/輸出

$ ./bin/binslessthanrem
enter an integer number: 10
0 ==   0
1 ==   1
2 ==   10
3 ==   11
4 ==   100
5 ==   101
6 ==   110
7 ==   111
8 ==   1000
9 ==   1001

仔細檢查一下,如果您還有其他問題,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM