gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:25:32 25 4
gpt4 key购买 nike

我编写了一个接受两个十进制数的程序,我希望我的程序将这两个数字(包括)之间的所有十进制数转换为二进制数,然后打印它们。

像这样工作:

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;
}

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

最佳答案

这看起来像是一个家庭作业问题,所以我会给出一些提示。

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

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

为了克服这个问题,请将数字按原样存储在数组中,并创建一个特殊的打印函数来打印二进制表示形式。这样做的优点是,只要数组足够大,就不会溢出任何内容。

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

关于c - 如何将二进制数数组转换为单个二进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58643785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com