<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[转:二进制与十进制转换，scanf,a]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sun, 28 Feb 2010 15:34:38 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	来源：http://www.39g.com/html/kaifa/262/2009/10/011415616641.htm<br/><br/>下面这段代码是二进制转换为十进制的计算，通过输入二进制，输出十进制数。运行无误。请大家先看代码，问题在下面<br/>#include&quot;math.h&quot; <br/>main() <br/>&#123; <br/>int a,i,k=-1,y=0; <br/>printf(&quot;&#92;n 请输入一个正确的二进制数:&quot;); <br/>scanf(&quot;%d&quot;,&amp;a); <br/>printf(&quot;&#92;n%d十进制为:&quot;,a); <br/>while(a!=0) <br/>&#123; <br/>i=a%10; <br/>k++; <br/>y+=i*pow(2,k); <br/>a=a/10; <br/>&#125; <br/>printf(&quot;%d&#92;n&quot;,y); <br/>&#125; <br/><br/>问题是 如果将以上代码中的<br/>printf(&quot;&#92;n 请输入一个正确的二进制数:&quot;); <br/>scanf(&quot;%d&quot;,&amp;a); <br/>printf(&quot;&#92;n%d十进制为:&quot;,a); <br/>三行去掉 直接a=0000111;这样就会出错， 实际应用中的a恰恰是赋值的不是输入的，请问高手上面的程序该怎么改<br/>UserYuH 发表于 2009-10-15 13:11<br/><br/>a=0000111;你这个赋值是八进字，十进字是73，就不是二进字形式的十进字，结果当然不对。<br/>使用整型a容易越出范围，如输入6个1，结果也错（除非你用的编译器int是4字节），最好用长整型。<br/>mrwtc 发表于 2009-10-15 13:17<br/><br/>UserYuH 你好 改了 还是错啊<br/>UserYuH 发表于 2009-10-15 13:20<br/><br/>你怎么改了，放来看看，对的你程序，a=00000111不能这个赋值，但可以这样：a=111<br/>mrwtc 发表于 2009-10-15 13:25<br/><br/>我也知道啊 如果是a=111的话就正常了 可是实际应用中我收到的a是十六位的二进制数 就是说 不能保证最高位是1 有可能是0000 1111 0000 1111 也可能是1111 0000 1111 0000 我该怎么将这种十六位二进制数转化为十进制数呢<br/>UserYuH 发表于 2009-10-15 13:27<br/><br/>可以用数组，就能保存前面的0，<br/>mrwtc 发表于 2009-10-15 13:30<br/><br/>考虑过用数组 可是因为 数据时一位一位收过来的 ch=ch&lt;&lt;1 这样ch就是一串数 而不是数组 我不知道怎么用数组表示ch<br/>UserYuH 发表于 2009-10-15 13:40<br/><br/>数组的：<br/>#include&quot;math.h&quot; <br/>main() <br/>&#123; <br/>int i,j,k=-1,y=0; <br/>char a[16]; <br/>printf(&quot;&#92;n 请输入一个正确的二进制数:&quot;); <br/>for(j=0;j&lt;16;j++) <br/>scanf(&quot;%c&quot;,&amp;a[j]); <br/>printf(&quot;&#92;n%s十进制为:&quot;,a); <br/>for(j=15;j&gt;=0;j--) <br/>&#123; <br/>i=a[j]-&#039;0&#039;; <br/>k++; <br/>y+=i*pow(2,k); <br/>&#125; <br/>printf(&quot;%d&#92;n&quot;,y); <br/>&#125;&nbsp;&nbsp;<br/><br/>如输入：0000000000000111 （是16位）<br/>显示：0000000000000111 十进制为：7<br/>王重平 发表于 2009-10-15 13:50<br/><br/>[em01]你好 还行谢谢<br/><br/>mrwtc 发表于 2009-10-15 13:52<br/><br/>UserYuH 太谢谢你了 还麻烦你写了一个程序 可是 还是有问题 <br/>问题是 如开始所说 我不能再程序中用 printf 和 scanf 因为 我的数据不是用键盘输入的 而是通过I/O口接收的 大概就如同下面这段程序<br/>for(i = 0; i &lt; 16; i ++) <br/>&#123; <br/>one_data = one_data &lt;&lt; 1; <br/><br/>SCLK = 0; <br/>_nop_(); <br/>SCLK = 1; <br/>_nop_(); /////时钟上升沿接收数据<br/>if(MISO = 1) ////MISO为接收端口<br/>&#123; <br/>one_data = one_data &#124; 0x01; <br/>&#125; <br/>&#125; <br/>这样接收-》移位-》接收——》移位 得到十六位二进制数 <br/><br/>你知道该怎么修改程序吗？？？<br/><br/>UserYuH 发表于 2009-10-15 14:23<br/><br/>不是很明白，美女。<br/>mrwtc 发表于 2009-10-15 14:29<br/><br/>UserYuH [em04][em04] 我的意思是 直接给a赋值 a=0000 1111 0000 1111 而不是通过scanf 给a 赋值<br/>mrwtc 发表于 2009-10-15 15:10<br/><br/>UserYuH 看来你也是。。。。。。。<br/>UserYuH 发表于 2009-10-15 15:11<br/><br/>嗯，慢慢解决你。<br/>int a=3855; 二进字表示为：0000 1111 0000 1111 <br/>这样赋值可以吗，可以的话你是想位移来求十进字吗，那直接输出就是十进字了，这没意义呀。 <br/>·<br/>不可以的话，你怎么把a赋成0000 1111 0000 1111 ,要是这串是十进字的，就因该a=111100001111,前面不能带0，但这样也超出整形范围。<br/>UserYuH 发表于 2009-10-15 15:14<br/><br/>回复 13楼 mrwtc<br/>[em03]，我就是..............<br/>yl118 发表于 2009-10-15 16:26<br/><br/>都是美女[em07] 我知道了！<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 转:二进制与十进制转换，scanf,a]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>