c++ - 在 C++ 中将二进制转换为整数会返回奇怪的结果
问题描述
我正在尝试创建一个简单的程序来将二进制数转换为111100010
十进制数482
。我在 Python 中也做过同样的事情,它可以工作,但我在 C++ 中找不到我做错了什么。
当我执行 C++ 程序时,我得到-320505788
. 我做错了什么?
这是 Python 代码:
def digit_count(bit_number):
found = False
count = 0
while not found:
division = bit_number / (10 ** count)
if division < 1:
found = True
else:
count += 1
return count
def bin_to_number(bit_number):
digits = digit_count(bit_number)
number = 0
for i in range(digits):
exp = 10 ** i
if exp < 10:
digit = int(bit_number % 10)
digit = digit * (2 ** i)
number += digit
else:
digit = int(bit_number / exp % 10)
digit = digit * (2 ** i)
number += digit
print(number)
return number
bin_to_convert = 111100010
bin_to_number(bin_to_convert)
# returns 482
这是 C++ 代码:
#include <iostream>
#include <cmath>
using namespace std;
int int_length(int bin_number);
int bin_to_int(int bin_number);
int main()
{
cout << bin_to_int(111100010) << endl;
return 0;
}
int int_length(int bin_number){
bool found = false;
int digit_count = 0;
while(!found){
int division = bin_number / pow(10, digit_count);
if(division < 1){
found = true;
}
else{
digit_count++;
}
}
return digit_count;
}
int bin_to_int(int bin_number){
int number_length = int_length(bin_number);
int number = 0;
for(int i = 0; i < number_length; i++){
int e = pow(10, i);
int digit;
if(e < 10){
digit = bin_number % 10;
digit = digit * pow(2, i);
number = number + digit;
}
else{
if((e % 10) == 0){
digit = 0;
}
else{
digit = bin_number / (e % 10);
}
digit = digit * pow(2, i);
number = number + digit;
}
}
return number;
}
解决方案
问题是您转换了这段 Python 代码
else:
digit = int(bit_number / exp % 10)
digit = digit * (2 ** i)
number += digit
进入这个:
else{
if((e % 10) == 0){
digit = 0;
}
else{
digit = bin_number / (e % 10);
}
digit = digit * pow(2, i);
number = number + digit;
}
换句话说,您是在申请/
后尝试申请%
,并在此过程中防止被零除。
这是不正确的:您应该反过来应用它们,如下所示:
else{
digit = (bit_number / e) % 10;
digit = digit * pow(2, i);
number = number + digit;
}
请注意,整个条件是多余的 - 您可以将其从for
循环中删除:
for(int i = 0; i < number_length; i++){
int e = pow(10, i);
int digit = (bit_number / e) % 10;
digit = digit * pow(2, i);
number = number + digit;
}
推荐阅读
- image - 无法将 InteractiveViewer 居中并在 Flutter Web 应用程序中平移
- css - SCSS - hsla 等效于 rgba() 函数
- c++ - 从嵌套类访问私有变量到封闭类中的私有方法
- powershell - PowerShell:从 Visual Studio Code 运行脚本有效,从 PS 命令行运行失败
- dynamic - Power BI 是否有一个选项可以通过更新数据来更新图表
- java - mmap.setonMarkerDragListener 使我的应用程序崩溃
- reactjs - 在 React JS 渲染中放置条件 div 标签
- swift - 精灵不会移动或从墙上反弹
- html - 使用 jQuery 确定字段是否已自动填充
- r - R将行日期转换为列日