C++ 如何将二进制转换为十进制?(以非常简单的方式)

C++ 如何将二进制转换为十进制?(以非常简单的方式),c++,C++,我需要写一个程序,将二进制数转换成十进制数 我对C++很陌生,所以我试着看别人的例子,但是它们对我来说太高级了。我认为我有一个聪明的想法,但我不确定我的想法是否偏离了方向,或者我只是错过了一些东西 int main(void) { //variables string binary; int pow2 = binary.length() - 1; int length = binary.length(); int index = 0; int de

我需要写一个程序,将二进制数转换成十进制数

我对C++很陌生,所以我试着看别人的例子,但是它们对我来说太高级了。我认为我有一个聪明的想法,但我不确定我的想法是否偏离了方向,或者我只是错过了一些东西

int main(void)
{
    //variables
    string binary;
    int pow2 = binary.length() - 1;
    int length = binary.length();
    int index = 0;
    int decimal = 0;

    cout << "Enter a binary number ";
    cin >> binary; cout << endl;

    while(index < length)
    {
      if (binary.substr(index, 1) == "1")
      {
        decimal = decimal + pow(2, pow2);
      }

      index++;
      pow2--;
    }

    cout << binary << " converted to decimal is " << decimal;
}
int main(无效)
{
//变数
字符串二进制;
int pow2=二进制.length()-1;
int length=binary.length();
int指数=0;
整数小数=0;

你的计算机是一个逻辑怪兽。你的计算机一次执行一行程序。从开始到结束。所以,让我们一起去旅行,和你的电脑一起,看看它到底做了什么,从你的代码开始>主< /代码>:

string binary;
您的计算机首先创建一个新的
std::string
对象。该对象当然是空的。其中没有任何内容

int pow2 = binary.length() - 1;
这是你的电脑做的第二件事

cout << "Enter a binary number ";
cin >> binary; cout << endl;
因为我们刚刚发现,
binary
是空的,
binary.length()
显然是0,所以这将
pow2
设置为-1。当你取0,然后从中减去1,这就是你得到的结果

int length = binary.length();
因为
binary
仍然是空的,所以它的length()仍然是0,这只是创建了一个名为
length
的新变量,其值为0

int index = 0;
int decimal = 0;
这会创建更多的变量,并将它们设置为0。这是计算机的下一步操作

cout << "Enter a binary number ";
cin >> binary; cout << endl;
这就是为什么你的计算机总是给你错误的结果。你的实际问题是:

当然,如果我的想法太离谱了,或者我只是错过了什么

好吧,你的想法也有其他问题。它有点不对劲。首先,这里没有什么真正需要使用
pow
函数。使用
pow
就像用锤子打死苍蝇一样。
pow
的作用是:它将整数值转换为浮点,计算第一个nu的自然对数mber,将其乘以第二个数字,然后将e提升到该次方,然后是您的代码(从未运行)最后将结果从浮点转换为整数,进行四舍五入。简单地将二进制转换为十进制不需要这种类型的东西。这不需要使用自然对数。这不是
pow
的目的

这项任务只需乘法和加法就可以轻松完成。例如,如果你已经有了数字3,下一个数字是7,那么你将3乘以10,然后再加上7,最后得到37。你对二进制基数2做了同样的事情,唯一的区别是你将数字乘以2,而不是10

但你真正错过最多的是计算机编程的黄金法则:

计算机总是完全按照你的吩咐去做,而不是按照你的要求去做


你需要准确地告诉你的计算机你的计算机需要做什么。一步一步。并且按照正确的顺序。在从
std::cin
读取字符串之前,告诉你的计算机计算字符串的长度并不能完成任何有用的事情。它不会在实际读取后自动重新计算其长度。因此,如果你需要计算输入字符串的长度,在读入后,而不是读入之前,计算它。
等等。

pow(2,pow2);
--什么使你认为你的想法可能有偏差?(提示:你应该包括你的实际结果和预期结果,以便人们知道他们在寻找什么。)(提示2:能够解释你的代码是迈向成功的第一步。继续写下去,也许可以缩小你的问题所在。)
cout << binary << " converted to decimal is " << decimal;