将十进制数转换为二进制

时间:2020-02-26 10:52:48

标签: c binary decimal

我写了一个将整数十进制数转换为二进制数的代码。 我试图使其打印所有的数字,直到给出的数字,而不是每次打印完全相同的数字。 例如,对于输入= 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;

谢谢大家!

2 个答案:

答案 0 :(得分:1)

您需要在循环中使用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;
}

答案 1 :(得分:1)

您也可以简单地使用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

仔细检查一下,如果还有其他问题,请告诉我。