繁体   English   中英

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

[英]How to convert binary to decimal? (In a very simple way)

我需要编写一个将二进制数转换为十进制数的程序。

我对 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;
}

您的计算机是逻辑野兽。 您的计算机一次一行地执行您的程序。 从开始到结束。 所以,让我们一起旅行,带着你的电脑,看看它最终做了什么,从你的main开始:

string binary;

您的计算机首先创建一个新的std::string object。 当然,这是空的。 里面什么都没有。

int pow2 = binary.length() - 1;

这是您的计算机所做的第二件事。

而且因为我们刚刚发现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;

在这里你打印一些东西,阅读一些东西。

while(index < length)

现在,我们进入厚厚的事情。 所以,让我们看看你的电脑做了什么,在你到达这一点之前。 它将index设置为 0, length也设置为 0。 所以,这两个变量都是 0,因此,这个条件是假的,0 不小于 0。所以while循环内没有任何东西执行。 while循环之后,我们可以跳到程序的末尾。

cout << binary << " converted to decimal is " << decimal;

这就是您的计算机总是给您错误结果的方式。 你的实际问题是:

确定我的想法是否偏离或我只是错过了一些东西。

好吧,您的想法也存在其他问题。 它稍微偏离了。 对于初学者来说,这里没有什么真正需要使用pow function。 使用pow就像试图用锤子杀死一只苍蝇。 pow所做的是:它将 integer 值转换为浮点数,计算第一个数字的自然对数,将其乘以第二个数字,然后将e提高到这个幂,然后你的代码(它永远不会运行)最终转换结果从浮点到 integer,四舍五入。 为了简单地将二进制转换为十进制,不需要这种类型的东西 这从不需要使用自然对数服务。 这不是pow的用途。

只需乘法和加法即可轻松完成此任务。 例如,如果您已经有了数字 3,而您的下一个数字是 7,则通过将 3 乘以 10,然后加 7,您最终得到 37。您对二进制做同样的事情,以 2 为底,唯一的区别是你把你的数字乘以 2,而不是 10。

但是您真正最缺少的是计算机编程的黄金法则

计算机总是完全按照您的要求执行,而不是您希望它执行的操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM