我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?

What's wrong with my approach to converting a binary number to decimal via iterative addition and checking individual characters (see code)?

本文关键字:代码 请参阅 字符 方法 问题 什么 单个 检查 迭代 二进制数 十进制      更新时间:2023-10-16

我知道这不是一个非常高级的问题,但是这整天都在困扰我。我正在尝试将二进制数转换为十进制数字。我正在尝试循环浏览一个二进制输入的字符串,并将每个字符与" 1"进行比较。如果字符为" 1",则答案应增加2个当前索引的功率。但是,当我尝试" 1010"时,该程序将输出5,这是错误的。

cout << "Okay then, enter your binary number: ";
string binaryInput = "";
cin >> binaryInput;
int answer = 0;
for(int i = 0; i < binaryInput.length(); i++) {
    answer += (binaryInput[i] == '1') ? (pow(2.0, i)) : (0);
}
cout << "The generated decimal number is " << answer << "!n";

功率从右到左增加,您正在做相反的功能。它应该像这样

int power=binaryInput.length();
for(int i = 0;i<binaryInput.length(); i++) {
power--;
answer += (binaryInput[i] == '1') ? (pow(2.0, power)) : (0);
}

答案应该是"学习如何使用调试器并逐步浏览代码以查看出了什么问题"。但是我过得愉快,所以我可以让您使用较长的询问方式。

让您以您的榜样,看看每次迭代中会发生什么:

i == 0; binaryInput[i] == '1'; answer += 1;

i == 1; binaryInput[i] == '0'; answer += 0;

i == 2; binaryInput[i] == '1'; answer += 4;

i == 3; binaryInput[i] == '0'; answer += 0;

因此,您可以看到为什么结果为5

巧妙的解决方案是更换。answer += (binaryInput[i] == '1') ? (pow(2.0, i)) : (0);answer <<= 1; answer |= binaryInput[i] == '1' ? 1 : 0;

我使用操作员<<=|=使其变得更有趣。作业:了解他们的工作。

您从左到右阅读。您必须从右到左阅读。

您的力量是错误的,i的最低值具有最高的功率,反之亦然。换句话说,这个

answer += binaryInput[i] == '1' ? pow(2.0, binaryInput.length() - i - 1) : 0;