请教一个小问题

[复制链接]
 楼主| caiwenbin 发表于 2007-10-19 21:04 | 显示全部楼层 |阅读模式
我的是ADS1.2,<br />#define&nbsp;a&nbsp;&nbsp;&nbsp;1&lt&lt29<br />#define&nbsp;a&nbsp;&nbsp;&nbsp;1&lt&lt30<br />#define&nbsp;a&nbsp;&nbsp;&nbsp;1&lt&lt31<br />前面两条编译都能通过,第三条编译就提示错误。<br />#define&nbsp;a&nbsp;&nbsp;&nbsp;1&lt&lt31<br />用#define&nbsp;a&nbsp;&nbsp;0x80000000就可以<br />难道左移不能移到最高位么?那么左移是不是也不能溢出啊。<br />请前辈门指点一下啊,小弟不胜感激。<br />
阿南 发表于 2007-10-19 21:17 | 显示全部楼层

呵呵,楼主,a只能定义一次

如果你将第三条去掉,还是会出现错误的,您试试吧
 楼主| caiwenbin 发表于 2007-10-19 21:46 | 显示全部楼层

我不是都定义一个的,只是打个比喻

  
 楼主| caiwenbin 发表于 2007-10-19 22:02 | 显示全部楼层

#define a 1<<31 编译就提示错误

  
computer00 发表于 2007-10-19 22:46 | 显示全部楼层

强制类型转换一下

  
wishcom 发表于 2007-10-19 23:08 | 显示全部楼层

LZ试试这样定义

#define&nbsp;a&nbsp;&nbsp;&nbsp;1UL&lt&lt31<br />或者<br />#define&nbsp;a&nbsp;&nbsp;&nbsp;1U&lt&lt31<br />或者<br />#define&nbsp;a&nbsp;&nbsp;&nbsp;1L&lt&lt31<br /><br />UL:unsigned&nbsp;long<br />U:unsigned<br />L:long<br />C语言中如果希望将数字常量强制定义为某一类型的可以加相应的后缀。<br /><br />建议LZ多翻一番谭浩强的C语言教程--!
老狼 发表于 2007-10-20 00:12 | 显示全部楼层

#define a (unsigned int)1<<31

#define&nbsp;a&nbsp;&nbsp;&nbsp;1&lt&lt31<br />改为<br />#define&nbsp;a&nbsp;&nbsp;&nbsp;(unsigned&nbsp;int)1&lt&lt31<br /><br />其实这个原因很简单,最高位为符号位,你必须强制为无符号型的!你用的是atmel的arm&nbsp;么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

509

帖子

0

粉丝