【发布时间】:2015-09-22 18:41:16
【问题描述】:
我正在创建一个加减 2 个数字的程序。然后我必须将这个答案输出到不同的基础上。
我的回答是十进制格式,long double类型,如:
long double answer;
answer = numberOne + numberTwo;
我想将此答案转换为二进制。现在我在我的程序中使用了前面的代码来执行此操作,但带有一个 char 指针:
char * decimalBinary (char * decimalNumber)
{
bool zeroFront = true;
int i;
int z;
int j = 0;
int n = atoi(decimalNumber);
char * binaryNum = malloc(32+1);
binaryNum[32] = '\0';
int current_index=1;
int end_index = strlen(decimalNumber)-1;
//Error check for valid decimal input, needed error check for beginning of code
while(current_index <= end_index)
{
if(decimalNumber[current_index] != '0' &&decimalNumber[current_index] != '1' &&decimalNumber[current_index] != '2' &&decimalNumber[current_index] != '3' &&decimalNumber[current_index] != '4' &&decimalNumber[current_index] != '5' &&dec[current_index] != '6' &&dec[current_index] != '7' &&decimalNumber[current_index] != '8' &&decimalNumber[current_index] != '9')
{
binaryNum[0] = -8;
return binaryNum;
}
current_index++;
}
for (i = 31; i >= 0; i--) {
z = n >> i;
if (z & 1)
{
binaryNum[j] = '1';
j++;
zeroFront = false;
}
else if (!zeroFront)
{
binaryNum[j] = '0';
j++;
}
}
binaryNum[j] = '\0';
return binaryNum;
}
我首选的解决方案是使用我在程序中已有的代码将我的答案转换为二进制格式,但正如您所看到的参数是冲突的,我不知道该怎么做。
在我的程序中减少可重用代码的另一个可能的解决方案是一起创建一个不同的函数,将十进制转换为二进制,但接受 long double 类型的参数,这对我来说也有点不清楚.
编辑:
我的答案不是long double,而是int 类型。
【问题讨论】:
-
将
long double转换为二进制与将int转换为二进制有很大不同(这就是您的代码所做的)。你确定这是你想要的吗?将 1.5 转换为二进制格式,您期望得到什么结果? -
是的,我相信我应该把 long double 改成 int
-
您的
answer是系统用来表示其类型的任何格式。无论该类型是int还是long double,其格式都不太可能很好地表征为“十进制”。 -
您知道
long double是浮点格式吗?您将不得不处理相当大范围的值(可能需要添加一些“E+exp”后缀)和小数部分。 -
if(decimalNumber[current_index] != '0' &&decimalNumber[current_index] != '1' … '9')行应该是if (!isdigit(decimalNumber[current_index]])),可以说是转换为(unsigned char)作为参数。如果你必须像这样多次写出几乎相同的东西,你应该培养一种错误的感觉——并找到一种避免重复自己的方法。 The Pragmatic Programmer 支持的原则之一是 DRY:不要重复自己。
标签: c pointers binary type-conversion decimal