[英]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.