Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2341968
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:03:13

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---------------------

阅读(957) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~