在下面的代码中,我将二进制转换为十进制,然后打印与之对应的字符。
void convertToChar(int binaryChar[],int length)
{
int multiplier = 0;
int i;
int sum = 0;
for(i=length;i>=0;i++)
{
sum = sum + (binaryChar[i]*pow(2,multiplier));
multiplier = multiplier + 1;
}
printf("\nThe character is: %c",sum);
}
问题在于sum = sum + (binaryChar[i]*pow(2,multiplier));
行。它会从warning: converting to
引发错误:double'
int'。请帮忙!
答案 0 :(得分:3)
为什么使用pow
来计算2的幂?这太慢了。使用1 << p
获得2的p次幂。例如,1 << 0
将给出1,1 << 1
将给出2,1 << 2
将给出4.这是由于位移操作的性质:向左移位一位相当于乘以2.
此外,您的程序看起来有无穷无尽的循环:
for(i=length;i>=0;i++)
如果length
是&gt; = 0,则循环永远不会终止。
这应该解决它:
for(i = length - 1; i>=0; i--) sum += (binaryChar[i]*(1 << multiplier++));
答案 1 :(得分:1)
pow
的签名是:
double pow(double X, double Y);
用于计算2 ^乘数使用:
1 << multiplier;
快速提及:
multiplier
变量。int binaryChar[]
是对的。名称中的字符表示不同的类型(和代码)..
答案 2 :(得分:0)
pow需要双打并返回一个双精度数。一个丑陋的修复就是使用强制转换
(int)pow(x, y)
但是在这个简单的程序中,为什么不自己做功率扩展而不是调用pow?
答案 3 :(得分:0)
问题是数据类型int的精度较小,因为double的精度(函数pow返回double)因此binaryChar [i]的值将被implizit转换为double,依此类推。 ..有问题的行隐式看起来像这样:
sum = (double) sum + ((double) binaryChar[i] * pow((double)2, (double) multiplier))
为了摆脱警告,你必须做一个明确的转换( 见Type Conversion),例如:
sum = sum + (binaryChar[i] * ((int) pow(2, multiplier));