【发布时间】:2013-09-26 11:28:12
【问题描述】:
所以我设计了一个算法来接收一个 32 位 char 数组并将其转换为适当的十进制等效值。
double calculateDecimal(char *string){
char *temp=string;
double total=0;
int i;
int count=31;
int x=pow(2,count);
for(i=0;i<32;i++){
if(!strncmp(temp,"1",1){
printf("%d + %d\n",x,total);
total+=x;
}
temp++;
count--;
x=pow(2,count);
}
printf("%d\n",total);
return total;
}
1) 我的 printf 语句已经证明正在读取正确的 1,并且正在计算正确的幂。我发现的是总和 x 一直等于我感到困惑的相同功率,因为我正处于风口浪尖上。
2)我的示例计算是 00000000100000010000000000000111,如果我输入正确,它应该是 84554151 的十进制等效值。感谢您的任何贡献,因为我知道我很接近。
【问题讨论】:
-
什么是“32 位字符数组”?
-
问题肯定是
x = pow(2, count);,因为x是int,而pow()返回double。pow(2, count)的整数等效值为1 << count。 -
在此基础上进行扩展,您可能只想使用
x = 1 << count而不是x = pow(2,count)。 -
我定义了一个名为 char finalBinary[33] 的数组来为空终止符腾出空间。当我将 x 更改为 pow 时,它打开了一个全新的单词罐,没有计算正确的 pow。
-
您应该将
x声明为unsigned。否则,当您尝试将其设置为pow(2, 31)时,它将溢出。