簡體   English   中英

從二進制字符串轉換為十進制?

[英]Conversion from binary string to decimal?

在下面的代碼中,我將二進制轉換為十進制,然后打印對應的字符。

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)); .它拋出錯誤:警告:從double' warning: converting to int'。請幫助!

為什么要使用pow計算 2 的冪? 它太慢了。 使用1 << p獲得 2 的 p 次方。 例如, 1 << 0將給出1 << 1將給出 2,1 1 << 2將給出 4。這是由於位移操作的性質:向左移動一位相當於乘以 2 .

此外,您的程序中似乎有一個無限循環:

for(i=length;i>=0;i++)

如果length >= 0,則循環將永遠不會終止。

這應該解決它:

for(i = length - 1; i>=0; i--) sum += (binaryChar[i]*(1 << multiplier++));

pow的簽名是:

double pow(double X, double Y);

計算 2^multiplier 使用:

1 << multiplier;

快速提一下:

  • 你有一個無限循環
  • 如果您從另一個方向解析字符串,您可以將總和乘以 2,因此您不需要multiplier變量。
  • 在出現許多問題之后,我什至不確定int binaryChar[]是否正確。 名稱中的字符表示不同的類型(和代碼)..

.

pow 接受雙打並返回雙打。 一個丑陋的解決方法就是使用演員表

(int)pow(x, y)

但是在這個簡單的程序中,為什么不自己做冪擴展而不是調用 pow 呢?

問題是數據類型 int 的精度小於 double 的精度(function pow返回 double)因此 binaryChar[i] 的值將被隱式轉換為 double 等等......問題行隱式看起來像這個:

sum = (double) sum + ((double) binaryChar[i] * pow((double)2, (double) multiplier))

為了擺脫警告,您必須進行顯式轉換(請參閱類型轉換),例如:

sum = sum + (binaryChar[i] * ((int) pow(2, multiplier));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM