我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
What's wrong with my approach to converting a binary number to decimal via iterative addition and checking individual characters (see code)?
我知道这不是一个非常高级的问题,但是这整天都在困扰我。我正在尝试将二进制数转换为十进制数字。我正在尝试循环浏览一个二进制输入的字符串,并将每个字符与" 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;
相关文章:
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 抽象类错误,请参阅声明" "是抽象的
- C++内联运算符重载中,请参阅当前对象
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- C++指向对象的指针堆数组中,如何将字符串传递给特定对象?有一些代码请看一下:
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
- 请参阅Watch-Window中的原始类型定义
- GDB 核心转储请参阅容器的内容
- 如何向类添加继承结构,请参阅"enable_share_on_this"
- C++ -- 错误 C2784: -- 请参阅'std::operator <<'声明
- Visual Studio 2010请参阅程序流(C++)
- C/C++ - 生成一个随机字符串会覆盖以前的字符串(请参阅下面的代码)
- 请参阅Visual Studio中的临时值
- 停止未定义的消息_WIN32_WINNT.默认为_WIN32_WINNT_MAXVER(请参阅WinSDKVer.h)
- 我无法让这段代码为赋值编译(请参阅代码后的注释)
- 方法在C++中存储一些数字(有关详细信息,请参阅内部)
- GDB:请参阅未使用的结构类型定义
- 需要了解 while 循环条件(请参阅注释)
- 为什么这段代码不起作用(请参阅详细信息)?
- 请参阅Qt C++项目中包含的库