实在读不懂了,请大家帮小弟我看下,书中的一个例题
实在读不懂了,请大家帮我看下,书中的一个例题。
本人刚开始学C++, 现在学到程序控制结构。书中有一个例题,是关于二进制向十进制转换的编程题。
原题如下:输入用一个二进制数表示的正整数,转换成十进制整数输出。
书中有提示:用户从高位到低位输入二进制位串,程序可以采用移位方式处理数据,每读入一位值,就把变量Dec(变量Dec表示转换之后的十进制数)中存入的数据乘以2,然后累加当前输入值。
书中程序如下:
思来想去两天了,还是无法理解这个方法是如何实现的,也手动按程序一步一步的算过,但二进制转十进制不是这么转换的啊。其中最不明白的就是"Dec*=2" //想不明白它怎么就左移一位了。
请各位前辈给予指点,晚辈不胜感激!
------解决方案--------------------
............
10进制的数据n,n*10就是进位;
同样的道理,2进制的数据Dec,Dec*2就是进位,也就是左移一位。
这个可是数学基础。
本人刚开始学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就是进位,也就是左移一位。
这个可是数学基础。