实在读不懂了,请大家帮小弟我看下,书中的一个例题

实在读不懂了,请大家帮我看下,书中的一个例题。
本人刚开始学C++, 现在学到程序控制结构。书中有一个例题,是关于二进制向十进制转换的编程题。
原题如下:输入用一个二进制数表示的正整数,转换成十进制整数输出。

书中有提示:用户从高位到低位输入二进制位串,程序可以采用移位方式处理数据,每读入一位值,就把变量Dec(变量Dec表示转换之后的十进制数)中存入的数据乘以2,然后累加当前输入值。

书中程序如下:
C/C++ code

#include<iostream>
using namespace std;
int main()
{
    int Dec=0;
    char ch;
    cout<<"Binary = ";

     do                            //略去前导符号,直至ch存放第一个合法数字
    {
        cin.get(ch);
    }while(ch !='0'&&ch!='1');
    do                              //循环
    {    
        Dec +=ch-'0';         //把字符转为数字,累加
        cin.get(ch);          //读入一位
        if(ch=='0'||ch=='1')  //如果是0或1
        Dec*=2;               //己经转换的数据左移一位   ??????
    }while(ch=='0'||ch=='1');      //读入非0,非1字符时结束循环
    cout<<"Decimal = "<<Dec<<'\n'; //输出转换结果

}


思来想去两天了,还是无法理解这个方法是如何实现的,也手动按程序一步一步的算过,但二进制转十进制不是这么转换的啊。其中最不明白的就是"Dec*=2" //想不明白它怎么就左移一位了。

请各位前辈给予指点,晚辈不胜感激!

------解决方案--------------------
............

10进制的数据n,n*10就是进位;
同样的道理,2进制的数据Dec,Dec*2就是进位,也就是左移一位。

这个可是数学基础。