【发布时间】:2017-07-28 20:26:48
【问题描述】:
我想在 20 位字段中打印文件中数字的二进制等价物,每 4 位后有空格,但是当数字超过 1024(我已经测试过)时,它不再以二进制输出,而是以基数我不知道(即 1234 = 0000 0014 1006 5408)
这是我的代码
#include <stdio.h>
long convertToBinary(long);
int main()
{
char binNum[20]; //binary number char array
int i;
long b, decNum; //b is output binary number, decNum is each input number from file
FILE *filePtr;
filePtr = fopen("numbers.txt", "r");
while (!feof(filePtr))
{
fscanf(filePtr, "%li", &decNum);
if (decNum < 0 || decNum > 65535)
{
printf("Error, %5li is out of range.\n", decNum);
continue;
}
b = convertToBinary(decNum); //function call for binary conversion
i = 18;
while (i >= 0)
{
if (i == 4 || i == 9 || i == 14)
{
binNum[i] = ' ';
}
else if (b != 0)
{
binNum[i] = b % 10 + '0';
b /= 10;
}
else
{
binNum[i] = '0';
}
i--;
}
binNum[19] = '.';
printf("The binary representation of %5li is: ", decNum);
for (i = 0; i<20; i++)
{
printf("%c", binNum[i]);
}
printf("\n");
}
return 0;
}
//Recursion function
long convertToBinary(long number)
{
if (number == 0)
{
return 0;
}
else
{
return (number % 2 + 10 * convertToBinary(number / 2));
}
}
文件numbers.txt 的数字如下:0 1 2 3 16 17 1234 5678 65535
【问题讨论】:
-
对不起,数字是 0 1 2 3 16 17 1234 5678 65535,1234 的输出应该是
0000 0100 1101 0010但是0000 0014 2107 5418 -
您的
convertToBinary()函数溢出了可以存储在long中的值。转换为以 10 为底的数字以便您可以打印内容是不寻常的。 -
在二进制数字计算机中,一切都已经是二进制形式了。将
long转换为long没有意义。作为旁注:不要使用递归。这只有不编写实际代码的计算机科学理论教授喜欢。 -
@Olaf 作为旁注:除非您用广告以外的其他东西来支持它们,否则不要做出笼统的陈述。只有政客才能做到这一点。 ...等等,当吉特。
-
@QPaysTaxes:哦,该声明的资金充足,来自 ca 的个人和交流经验。现在30年了。也许“教授”有点过于严格了;还有其他理论 Cs ppl 认为递归是哥伦布的鸡蛋。 IRL,在 C 和其他命令式语言中,它通常没什么用。在嵌入式编程中,一些编码标准甚至明确禁止它们。顺便说一句:这不是一个论点,而是一个陈述,所以它不能是“(argumentum)ad hominem”。并且应该明确陈述总是是主观的;否则它们就是事实。 (不过,我可能错过了这个笑话)