请教一个C语言的基础问题

[复制链接]
3701|19
 楼主| ZRL700424 发表于 2010-10-11 11:44 | 显示全部楼层 |阅读模式
本帖最后由 ZRL700424 于 2010-10-11 11:59 编辑

定义了一个变量:
unsigned int a;

判断时这写有问题(2500*72超出了整型范围):
if(a>=2501*72/100)

请教:应如何写呢?
yanwen217 发表于 2010-10-11 11:48 | 显示全部楼层
改定义为long int ,并直接写if(a>=25*70)
不亦心 发表于 2010-10-11 11:56 | 显示全部楼层
没有必要改long int
先除再乘
2# yanwen217
 楼主| ZRL700424 发表于 2010-10-11 12:01 | 显示全部楼层
a本来就是整型的,难道不改成长整型就不能这样比较了?
chenczy 发表于 2010-10-11 12:14 | 显示全部楼层
按3L说的办吧,先除,这样就不用改了
 楼主| ZRL700424 发表于 2010-10-11 12:51 | 显示全部楼层
先除不知道影不影响精度?
new1988 发表于 2010-10-11 12:54 | 显示全部楼层
2501*72/100=1800.72,四舍五入的话就算1801就是了啊
这不是个常量吗?  自己算出来不就得了,干嘛那么纠结
老鱼探戈 发表于 2010-10-11 12:56 | 显示全部楼层
按2楼的。
应改成 long 型的,如果先除,也会超过255的。
ayb_ice 发表于 2010-10-11 13:17 | 显示全部楼层
if(a>=2501L*72/100)
SLEET1986 发表于 2010-10-11 13:46 | 显示全部楼层
2501*72/100=1800.72,四舍五入的话就算1801就是了啊
这不是个常量吗?  自己算出来不就得了,干嘛那么纠结
new1988 发表于 2010-10-11 12:54
:victory:
 楼主| ZRL700424 发表于 2010-10-11 13:48 | 显示全部楼层
非常感谢ayb_ice!按你说的写就可以了!
 楼主| ZRL700424 发表于 2010-10-11 13:50 | 显示全部楼层
2501*72/100=1800.72,四舍五入的话就算1801就是了啊
这不是个常量吗?  自己算出来不就得了,干嘛那么纠结
new1988 发表于 2010-10-11 12:54


是常量,但有很多地方引用,所以在文件开头处是用字符定义的,因为这个常量在不同的项目中也是经常改变的
hbicecream 发表于 2010-10-11 14:29 | 显示全部楼层
常量
编译器会把它运算出来再编译的
numLiu 发表于 2010-10-12 00:09 | 显示全部楼层
C还是要深入
mbutterfly 发表于 2010-10-12 08:37 | 显示全部楼层
请问  9L,if(a>=2501L*72/100),这样的意思是什么呢?
不亦心 发表于 2010-10-12 08:47 | 显示全部楼层
:L 这种写法俺以前也没有见过,杯具
查了下,貌似就是强制转换成 long int
15# mbutterfly
jack_shine 发表于 2010-10-12 09:19 | 显示全部楼层
学习了~~~
carbonxie 发表于 2010-10-12 10:40 | 显示全部楼层
再要精一点的话,可以做两次判断比较,先比较整除100的数,然后再用a%100取余数再比较一次,不就行了吗?
continue_ 发表于 2010-10-15 17:43 | 显示全部楼层
15# mbutterfly
安的理解是这样:if(a>=2501L*72/100),
2501L中L就是说:编译器,按着数是L级别的,虽然看起来短,但你要按照L级别的来对待,long级别×int=long级别所以不会出错
善解人意 发表于 2010-10-21 21:38 | 显示全部楼层
学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

675

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部