gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:09:35 28 4
gpt4 key购买 nike

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

我是 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 对象。当然,这是空的。里面什么都没有。

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;

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

sure if my idea was way off or if I'm just missing something.

嗯,你的想法也有其他问题。它有点偏离。对于初学者来说,这里真的不需要使用 pow 函数。使用 pow 就像试图用锤子杀死一只苍蝇。 pow 所做的是:它将整数值转换为 float ,计算第一个数的自然对数,将其乘以第二个数,然后计算 e 的次方,然后您的代码(永远不会运行)最终将结果从 float 转换为整数,四舍五入。为了简单地将二进制转换为十进制,不需要这种类型的任何东西。这从不需要使用自然对数的服务。这不是 pow 的用途。

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

但您真正最想念的是计算机编程的黄金法则:

计算机总是完全按照您的指示去做,而不是按照您的意愿去做。

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

关于c++ - 如何将二进制转换为十进制? (以一种非常简单的方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58107682/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com