打印

这是咱回事呀???搞不灵清呀。

[复制链接]
1916|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子尘埃|  楼主 | 2008-3-6 14:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
电子尘埃|  楼主 | 2008-3-6 14:12 | 只看该作者

俺是用keil V7.20版的

俺是用keil V7.20版的
俺是用keil V7.20版的
俺是用keil V7.20版的

使用特权

评论回复
板凳
电子尘埃|  楼主 | 2008-3-6 14:13 | 只看该作者

绝对不要怀疑的结果,我试了N次

难道是优化错误??????????????

使用特权

评论回复
地板
电子尘埃|  楼主 | 2008-3-6 14:15 | 只看该作者

把优化关掉了,还是如此

使用特权

评论回复
5
农民讲习所| | 2008-3-6 14:18 | 只看该作者

temp = 0xffffL + 0xffffL + 0xffffL + 0xffffL;

使用特权

评论回复
6
xwj| | 2008-3-6 14:25 | 只看该作者

LS正解,Keil默认常量的字长为16位,大了就字节去低16位了

所以应该加个L表示常量是32位的

使用特权

评论回复
7
电子尘埃|  楼主 | 2008-3-6 14:51 | 只看该作者

谢谢楼上两位我心中的高人。

我实际上是变量,我当时为了找原因就用常量了。
temp = 0xffff + 0xffff + 0xffff + 0xffff;实际上是:
unsigned long int temp;
unsigned int a,b,c,d;

temp = a +b +c +d;
像这样处理方法是咱弄呢?

使用特权

评论回复
8
ayb_ice| | 2008-3-6 14:54 | 只看该作者

随便说说

LZ:
unsigned long int temp;这样定义你说到底是long还是int类型...
应该是:
unsigned long temp;

使用特权

评论回复
9
xwj| | 2008-3-6 14:58 | 只看该作者

unsigned int a,b,c,d;,不饱和才怪

只能先强制转换后再运算,这样:
temp = (unsigned long int)(a) +(unsigned long int)(b) +(unsigned long int)(c) +(unsigned long int)(d);

使用特权

评论回复
10
农民讲习所| | 2008-3-6 15:16 | 只看该作者

temp = (unsigned long)(a + b + c + d);就行。

使用特权

评论回复
11
电子尘埃|  楼主 | 2008-3-6 15:19 | 只看该作者

temp = (unsigned long int)(a) +b +c+ d;就正常

unsigned long int temp;    //temp是32位.
 xwj 好!
a,b,c,d是加数呀,不是存放结果的地方呀.我把存放结果的地方不是放有32位的空间给它用了吗?为什么会饱和呀.
再说temp = a+b+c+d; 不是默认的低位强制转成高位的吗?

LZ:
unsigned long int temp;这样定义你说到底是long还是int类型...
应该是:
unsigned long temp; 


unsigned long temp; 跟unsigned long int temp;是一模一样的.

使用特权

评论回复
12
xwj| | 2008-3-6 15:28 | 只看该作者

看编译器和处理器来定,long long,long int都是正常写法啊

一个基本常识:
不同编译器和处理器下int的位数是不一样的哦!!!

使用特权

评论回复
13
电子尘埃|  楼主 | 2008-3-6 17:21 | 只看该作者

xwj 农民讲习所

unsigned long int temp;    //temp是32位.

a,b,c,d是加数呀,不是存放结果的地方呀.我把存放结果的地方不是放有32位的空间给它用了吗?为什么会饱和呀.
再说temp = a+b+c+d; 不就是默认的低位强制转成高位的吗?
为什么还要强加(unsigned long).

使用特权

评论回复
14
yewuyi| | 2008-3-6 19:08 | 只看该作者

~~,请问KEIL去……

使用特权

评论回复
15
mohanwei| | 2008-3-6 19:17 | 只看该作者

养成习惯就好了,强制转换一下……

不要抱怨了,C好歹比汇编用起来方便多了,呵呵

使用特权

评论回复
16
电子尘埃|  楼主 | 2008-3-6 19:30 | 只看该作者

哈哈,不抱怨,不抱怨。

  幸好有高手们这么热心帮我。谢谢了....
高手们再帮个忙呀。
  如何在KEIL中增加单片机型号呀?在家里新装了个较新版的KEIL,可找不着Philips 公司系列的单片机型号了。
  

使用特权

评论回复
17
yjgyiy| | 2008-3-7 07:57 | 只看该作者

在NXP下吧

在NXP下吧

使用特权

评论回复
18
hkap| | 2008-3-7 09:23 | 只看该作者

temp = a ; temp = temp+ b + c + d;

养成良好习惯好啊

使用特权

评论回复
19
daotiansi| | 2008-3-7 10:12 | 只看该作者

随便说说

看看是不是这样:
    因为a b c d都是int型数据,所以a+b+c+d的结果也是int型数据,当然也就溢出了.这时候用强制转换符改变和的数据类型才会正确.

temp = a ; 
temp = temp+ b + c + d;
这种写法也是利用的这个道理.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

444

帖子

0

粉丝