【问题标题】:Converting Integer to 32-bit Binary - Output is backwards将整数转换为 32 位二进制 - 输出向后
【发布时间】:2015-02-23 20:46:51
【问题描述】:

我正在编写一个简单的程序来将整数(0 到 2147483647 之间)转换为 32 位二进制。

不幸的是,输出正在倒退。 例如,我得到的是2 = 01,而不是2 = 10

#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

【问题讨论】:

  • @immibis:我很确定 Goush 知道这一点。
  • @ScottHunter 你会惊讶于有多少人不这样做。
  • @immibis:然而,她/他发布了一个问题,询问如何解决它。知道存在问题和知道如何解决它(或为什么你的代码没有说明你认为它做了什么)之间是有区别的。

标签: c binary integer converter


【解决方案1】:

您已经单独打印了数字;只需让ji 开始,并将down 计数为0。至于打印空格:找出i 的哪些值需要空格,测试它们,然后打印一个只有这样。

【讨论】:

  • 嘿,谢谢。有效!不再向后输出。非常感谢!
  • 摆脱测试 if (n == 1) 并循环 32 次,而不是 36 次!另外你为什么拒绝0 作为输入?
【解决方案2】:

好吧,基本转换算法将首先产生较低的数字,因此您必须反转结果才能以通常的阅读顺序显示它们。

一种方法:

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 (" ");
    } 
}

【讨论】:

    猜你喜欢
    • 2017-08-18
    • 2015-05-18
    • 1970-01-01
    • 2014-03-13
    • 2018-12-11
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多