打印

请教一个小问题

[复制链接]
1355|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caiwenbin|  楼主 | 2007-10-19 21:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的是ADS1.2,
#define a   1<<29
#define a   1<<30
#define a   1<<31
前面两条编译都能通过,第三条编译就提示错误。
#define a   1<<31
用#define a  0x80000000就可以
难道左移不能移到最高位么?那么左移是不是也不能溢出啊。
请前辈门指点一下啊,小弟不胜感激。

相关帖子

沙发
阿南| | 2007-10-19 21:17 | 只看该作者

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

如果你将第三条去掉,还是会出现错误的,您试试吧

使用特权

评论回复
板凳
caiwenbin|  楼主 | 2007-10-19 21:46 | 只看该作者

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

使用特权

评论回复
地板
caiwenbin|  楼主 | 2007-10-19 22:02 | 只看该作者

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

使用特权

评论回复
5
computer00| | 2007-10-19 22:46 | 只看该作者

强制类型转换一下

使用特权

评论回复
6
wishcom| | 2007-10-19 23:08 | 只看该作者

LZ试试这样定义

#define a   1UL<<31
或者
#define a   1U<<31
或者
#define a   1L<<31

UL:unsigned long
U:unsigned
L:long
C语言中如果希望将数字常量强制定义为某一类型的可以加相应的后缀。

建议LZ多翻一番谭浩强的C语言教程--!

使用特权

评论回复
7
老狼| | 2007-10-20 00:12 | 只看该作者

#define a (unsigned int)1<<31

#define a   1<<31
改为
#define a   (unsigned int)1<<31

其实这个原因很简单,最高位为符号位,你必须强制为无符号型的!你用的是atmel的arm 么?

使用特权

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

本版积分规则

67

主题

509

帖子

0

粉丝