对我的代码如何工作感到困惑,并想了解其中的逻辑
confused on how my code work and want to understand the logic in it
请不要阻止这个问题,我是一个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。
相关文章:
- 了解其工作原理
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 用于了解输入和输出流缓冲区实际工作方式的程序
- 无法让我了解 cin.get 和 cout 在这里的工作方式
- 不了解C 集合的工作方式
- 我试着了解方法覆盖是如何工作的,不知道为什么输出 2
- 了解 declval 在copy_assignment情况下的工作方式
- 了解文件页在技术级别的工作方式
- 我试图了解 fork() 函数序列是如何工作的?
- 非CS人员需要了解线程是如何工作的,因为它与多核处理器有关
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?
- std::了解它是如何工作的?运算符==
- 了解 std::线程语义,其中工作器函数作为类成员
- 了解指针和'new'如何工作的问题
- 了解函数特征模板的工作原理.特别是,指向成员函数的指针是怎么处理的
- 了解编译器的工作原理
- 了解内存分配的工作原理(LLVM)
- 我不认为我了解生成文件的工作原理
- 对我的代码如何工作感到困惑,并想了解其中的逻辑
- 我有一个问题,了解如何与队列工作