1.C/C++ 的输入和输出:C/C++ 默认输入为字符串(字符数组)或者十进制数据(整数、浮点数、小数等)。
程序里面的 aBin 输入的虽然看起来是个2进制数, 但是 C/C++ 默认的输入输出是 10 进位的,
所以在 cin>>aBin; 得到的数是 10 进位的, 如果输入 1010, 在 C/C++ 的 I/O 函数认为是 10 进位的“一千零一十”
2.内存里面储存的都是 2 进位的, 所以 aBin 储存的数值为输入的数值转成 2 进位的数的值, 而不是以输入的格式储存的。
3.这个二进制转十进制的程序, 实际上输入的是只含有“1”和“0”的十进制数, 输出的是个真正的十进制数。
所以内存里面的 aDec 和 aBin 都是二进制的数据, aBin 的数值就等于刚才输入的“一千零一十”等价的二进制数。
4.现在要把输入的“一千零一十”转为内存里面的二进制数 1010, 而不是十进制等价的二进制数 1111110010:
从个位起,把“一千零一十”分解为 0, 1, 0, 1
就需要把 aBin 除以 10 的余数为第0个数, 即二进制数据当中的 D0 位, 这个数要左移 i 位放在 aDec 里面, i=0
把 aBin 除以 10 之后的数, 再除以 10 的余数为第1个数, 即二进制数据当中的 D1 位, 这个数要左移 i 位放在 aDec 里面, i=1
把 aBin 除以 10 之后的数, 再除以 10 的余数为第2个数, 即二进制数据当中的 D2 位, 这个数要左移 i 位放在 aDec 里面, i=2
……
所以就有:
for(int i=0; aBin; i++)
{
aDec|=(aBin%10)< aBin/=10;
}
循环的条件就是 aBin 不等于零, 如果 aBin 等于 0 就结束循环, 转换完成。
5.Dec 里面储存的就是二进位的 1010, 所以输出为二进位 1010 等价的 10 进位数了,
因为 C/C++ 输出时总是把内存中的二进位数转为10进位数。
--------------------next---------------------
阅读(963) | 评论(0) | 转发(0) |