如何将二进制数数组转换为单个二进制数?

时间:2019-10-31 12:52:19

标签: c

我做了一个程序,接受两个十进制数字,我希望我的程序将两个数字(包括在内)之间的所有十进制数字转换为二进制数字,然后打印出来。

像这样工作:

Entrance interval: 1   5 //input

1 // output
10
11
100
101

我希望我的函数从主函数接受一个十进制数,然后将其转换为二进制数,然后将其作为单个二进制数返回,以便可以在主函数中打印出来。这是我执行的程序:

#include <stdio.h>
#include <ctype.h>

//function for converting to binary:
int decToBinary(int number_in_interval)
{
    int binaryNum[32];
    int a = 0;
    while (number_in_interval > 0)
    {
        binaryNum[a] = number_in_interval % 2;
        number_in_interval = number_in_interval / 2;
        a++;
    }
    for(int j = a - 1; j >= 0; j--) 
    {                               
        binaryNum[j];
    }
    return binaryNum;
}

//main function
int main ()
{
    int HI;
    int LO;
    char X[200]={0};
    char test_if_l_c[] = {'c','l'};

    printf("Entrence interval:\n");
    scanf("%s%d%d", X, &LO, &HI); 

    if ( X[0] != test_if_l_c[0] && X[0] != test_if_l_c[1] || X[1] != 0 || X[2] != 0 || X[3] != 0 || X[4] != 0 || HI <= LO || HI == 0 || LO == 0) 
    {
        printf("Wrong input.\n");
        return 1;   
    }

    int i;
    int num = HI - LO + 1;
    int count_in_interval = 0;
    int LO_ = LO;
    for(i = 0; i < num; i++)
        {
            count_in_interval = count_in_interval + 1; 
        }

    for(int u = 0; u < pocet_interval ; u++)
    {
        int number_in_int = LO_ + u;
        printf("%d\n", decToBinary(number_in_int)); 
    }

    return 0;
}

由于我是初学者,请您能帮助我完成这项工作吗?如果有更简单的方法可以做到这一点,我将为此感到非常高兴。

1 个答案:

答案 0 :(得分:0)

这看起来像是一个作业问题,因此我将删除一些提示。

您已经有了二进制表示形式,只需要从中构造一个数字。假设您有10110,则int将是1*(10^4) + 0*(10^3) + 1*(10^2) + 1*(10^1) + 0*(10^0)

但是请注意,这可能会导致您溢出int范围。

要解决此问题,请将数字原样存储在数组中,并创建一个特殊的打印函数以打印出二进制表示形式。这样做的好处是,只要数组足够大,就不会溢出任何内容。

一种更简单但稍微涉及一点的技术是仅利用计算机以二进制形式存储数字这一事实。要获得数字的第k位(从 right ),您需要做的就是num & (1<<(k-1))(如果k的位为零,则返回0,如果该位为1,则为非零。
例如,对于数字10110(十进制22),22 & (1<<4)将为非零,这意味着从右数第5位为1。类似地,检查第2位(从),22 & (1<<1)返回一个非零数字,表示该位置为1。