5537|13

1万

帖子

16

TA的资源

版主

楼主
 

【问TI】关于数后边神秘东东 [复制链接]

专家好:

我这个问题是我在做实验时找到的

ulVal = adcSample( ); // ADC采样
ulVal = (ulVal *3000UL)/1024UL; // 转换成电压值

如果我不加UL得出的结果确为零,我用仿真已经仿出前个ulVal值是563,但到下边这个如果写成:


ulVal = (ulVal*3000)/1024;确一定等于零,这是为什么呢?Float型我记得怎么没后缀啊?还有什么后缀得注意呢?

请解答:谢谢!!!!!!!!!!!!!!!!

最新回复

是的,正常编译器处理有隐式类型,比如一个整数,一般用int型,而不是unsigned int型,更不会用float型和double型。因为这样节省内存空间,减小了代码复杂度。这是C编译器的通性。当然不排除某些DSP编译器会默认浮点型,不过这毕竟是少数。如果你本来愿望是这个数为float型,结果编译器认为是int型进行处理,自然就会出错。 常数后缀的意思就是把你的想法告诉编译器,让编译器理解。比如你认为这个数是浮点型,就用f或者l 后缀和数据类型对应关系如下 unsigned    u long            l long long    ll float            f 可以看出,常量的后缀和前缀是同样的效果,都用于告诉编译器常量的类型,结构等 前缀对应关系如下 十进制       空 八进制       0 十六进制    0x    详情 回复 发表于 2011-6-24 10:18
 
点赞 关注
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复
举报

350

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
我是菜鸟,我觉得直接看反汇编的!
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
UL是强制类型转换
这个问题的关键在于隐式类型转换,这个可能一两句话说不清楚,想了半天也真没想出那本书仔细介绍了这个问题。
那我就用比较白话得说法来解释吧,UL的作用就是告诉编译器,这个数是要用卡车运输的,不要用板车给我运坏了。
明白否?
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

4
 

原帖由 leang521 于 2011-6-12 23:37 发表 UL是强制类型转换这个问题的关键在于隐式类型转换,这个可能一两句话说不清楚,想了半天也真没想出那本书仔细介绍了这个问题。那我就用比较白话得说法来解释吧,UL的作用就是告诉编译器,这个数是要用卡车运输的 ...

 

不明白。

 
 
 

回复

1万

帖子

16

TA的资源

版主

5
 

回复 板凳 leang521 的帖子

谢谢回答,似懂非懂,等我再想想
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

6
 
这和编译器有关的,
比如如下指令
unsigned long a,b;
a = 10 * 10000;
b = 10ul * 10000;
在某些编译器下可能输出如下结果
a = 0xffff86a0
b = 0x000186a0
这既是编译器理解错误造成的
后缀的作用在于告诉编译器,这个数是什么数,使用什么样的内存形式。避免编译器理解错误使用了不正确的内存形式,之后在隐式转换中导致内存的不正确变更导致错误。
 
 
 

回复

1万

帖子

16

TA的资源

版主

7
 

回复 6楼 leang521 的帖子

这下明白了,原来编译器也分好几国语系
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1282

帖子

10

TA的资源

五彩晶圆(初级)

8
 

回复 板凳 leang521 的帖子

比TI专家还专家啊!
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

9
 

原帖由 ddllxxrr 于 2011-6-13 15:23 发表 这下明白了,原来编译器也分好几国语系

 

不知好几国语系,还有俚语

 

很多编译器并不认真遵从C99规范,有很多自己的习惯,甚至bug。所以还是注意点好。

 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

10
 
天天在关注这个问题,等TI的专家给出权威解释,左等右等没影儿了,看来真被问倒了?
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

11
 

其实这种事情在编译器中很常见,比如进行数值比较时,不同编译器的false和true可能不一样。进行浮点运算时可能因为不同精度导致数值误差,epsinon也有极大差别。最终导致结果偏离我们的理想。

 
 
 

回复

422

帖子

0

TA的资源

纯净的硅(高级)

12
 

原帖由 xu__changhua 于 2011-6-13 00:48 发表   不明白。

 

这个东西大,要用卡车才能装呗。

 

你这个表情,再加上说“不明白”。太有意思了,赞一个!

 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

13
 

原帖由 longxtianya 于 2011-6-23 20:20 发表   这个东西大,要用卡车才能装呗。   你这个表情,再加上说“不明白”。太有意思了,赞一个!

 

=======================================

 

就【不明白】三字,萨表情?有撒赞的?越来越不明白

 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

14
 

原帖由 longxtianya 于 2011-6-23 20:20 发表   这个东西大,要用卡车才能装呗。   你这个表情,再加上说“不明白”。太有意思了,赞一个!

是的,正常编译器处理有隐式类型,比如一个整数,一般用int型,而不是unsigned int型,更不会用float型和double型。因为这样节省内存空间,减小了代码复杂度。这是C编译器的通性。当然不排除某些DSP编译器会默认浮点型,不过这毕竟是少数。如果你本来愿望是这个数为float型,结果编译器认为是int型进行处理,自然就会出错。

常数后缀的意思就是把你的想法告诉编译器,让编译器理解。比如你认为这个数是浮点型,就用f或者l

后缀和数据类型对应关系如下

unsigned    u

long            l

long long    ll

float            f

可以看出,常量的后缀和前缀是同样的效果,都用于告诉编译器常量的类型,结构等

前缀对应关系如下

十进制       空

八进制       0

十六进制    0x

 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表