| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2474 人关注过本帖
标题:关于:二进制与十进制转换,scanf,&a
只看楼主 加入收藏
mrwtc
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-9
收藏
 问题点数:0 回复次数:15 
关于:二进制与十进制转换,scanf,&a
下面这段代码是二进制转换为十进制的计算,通过输入二进制,输出十进制数。运行无误。请大家先看代码,问题在下面
#include"math.h"
main()
{
int a,i,k=-1,y=0;
printf("\n 请输入一个正确的二进制数:");
scanf("%d",&a);
printf("\n%d十进制为:",a);
while(a!=0)
{
i=a%10;
k++;
y+=i*pow(2,k);
a=a/10;
}
printf("%d\n",y);
}

问题是 如果将以上代码中的
printf("\n 请输入一个正确的二进制数:");
scanf("%d",&a);
printf("\n%d十进制为:",a);
三行去掉 直接a=0000111;这样就会出错, 实际应用中的a恰恰是赋值的不是输入的,请问高手上面的程序该怎么改
搜索更多相关主题的帖子: 十进制 scanf 二进制 
2009-10-15 12:43
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
a=0000111;你这个赋值是八进字,十进字是73,就不是二进字形式的十进字,结果当然不对。
使用整型a容易越出范围,如输入6个1,结果也错(除非你用的编译器int是4字节),最好用长整型。

努力—前进—变老—退休—入土
2009-10-15 13:11
mrwtc
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-9
收藏
得分:0 
UserYuH 你好  改了 还是错啊
2009-10-15 13:17
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
你怎么改了,放来看看,对的你程序,a=00000111不能这个赋值,但可以这样:a=111

努力—前进—变老—退休—入土
2009-10-15 13:20
mrwtc
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-9
收藏
得分:0 
我也知道啊 如果是a=111的话就正常了  可是实际应用中我收到的a是十六位的二进制数 就是说 不能保证最高位是1   有可能是0000 1111 0000 1111   也可能是1111 0000 1111 0000    我该怎么将这种十六位二进制数转化为十进制数呢
2009-10-15 13:25
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
可以用数组,就能保存前面的0,

努力—前进—变老—退休—入土
2009-10-15 13:27
mrwtc
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-9
收藏
得分:0 
考虑过用数组  可是因为 数据时一位一位收过来的 ch=ch<<1   这样ch就是一串数 而不是数组  我不知道怎么用数组表示ch
2009-10-15 13:30
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
数组的:
程序代码:
#include"math.h"  
main() 
{  
int i,j,k=-1,y=0; 
char a[16]; 
printf("\n 请输入一个正确的二进制数:"); 
for(j=0;j<16;j++) 
  scanf("%c",&a[j]); 
printf("\n%s十进制为:",a);  
for(j=15;j>=0;j--) 
  { 
   i=a[j]-'0'; 
   k++; 
   y+=i*pow(2,k); 
  } 
printf("%d\n",y); 
} 
如输入:0000000000000111   (是16位)
显示:0000000000000111 十进制为:7

努力—前进—变老—退休—入土
2009-10-15 13:40
王重平
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-10-15
收藏
得分:0 
你好  还行谢谢
2009-10-15 13:50
mrwtc
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-9
收藏
得分:0 
UserYuH 太谢谢你了  还麻烦你写了一个程序  可是 还是有问题  
问题是  如开始所说  我不能再程序中用 printf 和 scanf  因为 我的数据不是用键盘输入的 而是通过I/O口接收的   大概就如同下面这段程序
for(i = 0; i < 16; i ++)
 {
  one_data = one_data << 1;
 
  SCLK = 0;
  _nop_();
  SCLK = 1;
  _nop_();  /////时钟上升沿接收数据
  if(MISO = 1)  ////MISO为接收端口
       {
   one_data = one_data | 0x01;
  }
 }
这样接收-》移位-》接收——》移位  得到十六位二进制数   

你知道该怎么修改程序吗???
2009-10-15 13:52
快速回复:关于:二进制与十进制转换,scanf,&a
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024513 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved