对我的代码如何工作感到困惑,并想了解其中的逻辑

confused on how my code work and want to understand the logic in it

本文关键字:了解 何工作 代码 我的 工作      更新时间:2023-10-16

请不要阻止这个问题,我是一个c++新手,真的很想了解我所工作的代码。

// bintodec.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main(){
        string inp;
        int dec = 0;
        char base;
        cout << "Input a number: ";
        cin >> inp;
        cout << "Input the base your number is in: ";
        cin >> base;
        for(int i = inp.length()-1, j = 0; i >= 0; i--, ++j) dec += (inp[i]-48) * pow((float)base-48, j);
        cout << "Your number in base 10 is: " << dec <<endl;
        system("pause");
return 0;
}

我真的很想了解这个FOR LOOP是如何运行INPUT NUMBER和BASE的,然后得到一个答案。

输入110 BASE 2 PRINT: 6

* for循环是怎么做的

谢谢!

 for(int i = inp.length()-1, j = 0; i >= 0; i--, ++j)
     dec += (inp[i]-48) * pow((float)base-48, j);

48是'0'的值,它们应该是连续的,直到'9'为57。考虑到这一点,你应该能够想出如何完成这项工作。

他们将ASCII输入值插入inp,并通过减去该字符的ASCII偏移量来转换为实际的十进制等价物。在这一点上,他们只是将输入的小数点的每一个位置加到该小数点的底数的幂上。例如,对于输入为BASE-2的数字,二进制数中的每个数字都相当于以下内容:

2^2  2^1  2^0
 |    |    |
 1    1    0

因此,要将其转换为BASE-10,您将加(1*2^2)+(1*2^1)等于4 + 2 = 6。

如果你输入了一个十六进制数(即BASE-16),比如0xA5,它看起来像这样:

16^1  16^0
  |     |
  A     5

那就等于10*16^1 + 5*16^0等于160 + 5 = 165

'0'=48,因此该循环从末尾开始取数字,将字符转换为数字,乘以取正确幂的基数,并将结果相加。

48只是将ASCII输入转换为它的数字表示,'0' = 48,'1' = 49,等等。for循环所做的是对输入的每个字符进行迭代,将其提高到输入的基数,并将其相加以得到十进制(以10为基数)的答案。

如果你想知道为什么它在数学上是有效的,请查看http://en.wikipedia.org/wiki/Radix

例如,以6为进制的

3657 = 3x6^4 + 6x6^3 + 5x6^2 + 7x6。