首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-11 
实在读不懂了,请大家帮我看下,书中的一个例题。本人刚开始学C++, 现在学到程序控制结构。书中有一个例题,是

实在读不懂了,请大家帮我看下,书中的一个例题。
本人刚开始学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就是进位,也就是左移一位。

这个可是数学基础。

热点排行