ICC7.22中如何对unsigned long型的数据进行按位取反?
我在程序用用到long型数据,每一位代表不同的意义,我在取反的时候,ICC7.22只能到16位,具体如下:unsigned long x=0x00008000;
unsigned long y;
y=~x;
我调试的时候,y=0x00007FFF;而y=0xffff7fff才对。
请教在什么地方设置下ICC或者如何对32位数据进行按位取反??谢谢 帖子沉的太快,顶一下,希望有高手赐教 read a decent C book on type promotion. 查资料:unsigned char、char、bool等低于int型的类型,进行运算的时候都要先提升再运算,提升时根据signed和unsigned,在前面补位为0或者1,若是unsigned,则直接前面全补0;若为signed,则根据最高位为0还是1,若为0则全部补位为0,若为1则全部补位为1。
那long高于int型的类型,我只能低16位取反,高16位取反,再合并起来这种方式吗? 我之前项目中也用到对long型取反,但没遇到这样的问题,用ICC 6.3编译的。 没有验证过……如果真是这样……那就是bug了……
你可以用ICC生成coff文件,然后用avr studio4的simulator仿真,看看真相。 应该不是ICC的bug,刚专门找了个xp的台式机,装了icc6.3,调试了下,结果一样。
可还是有点不理解,正在网上查相关资料,不知道有没有其他人遇到这样的问题。
avr studio4的simulator仿真我一直没用过,也是设断点吗?进不去断点 没这么用过,看看 "我只能低16位取反,高16位取反,再合并起来这种方式吗?"
dense, very dense.
try:
"unsigned long x=0x00008000ul; " instead. LZ是个大骗子
面对楼主的疑问,我很蛋疼的用ICC7.22+AVR studio 仿真了下
http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_643588HWILRX.JPG
(原文件名:test.JPG)
一切正常啊 http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_643666NXTM48.jpg
(原文件名:01.jpg)
第一次断点Alarm_Types的值。
http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_643668G2WPWX.jpg
(原文件名:02.jpg)
下个断点Alarm_Types的值。
图片中的y和xxxxx
unsigned longxxxxx=0x00080000;
unsigned longy;
http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_643671FKCZGB.jpg
(原文件名:02.jpg)
仿真确实是正确的。上面的Alarm_Types为什么不对呢? 回复【9楼】first blood
lz是个大骗子
面对楼主的疑问,我很蛋疼的用icc7.22+avr studio 仿真了下
也许我水平确实很差,但我是在请教,我骗你发不了家。 仿真确实是正确的。上面的Alarm_Types为什么不对呢?
-----------------------------
参见3楼你自己的答案。常量也是有类型的,根据范围来定,默认是有符号的。 谢谢【12楼】 yyccaa,millwood0,及各位高手
#define PROBE_Down_Alarm 0x00000100ul//探头脱落
在数据后面加了ul,现在仿真ok了。
常量也是有类型的,根据范围来定,默认是有符号的。受教了,谢谢 在缺省情况下,整型文字常量被当作是一个 int 型的有符号值
受教了谢谢
页:
[1]