2971|5

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stcosmic编译器得不到正确结果 [复制链接]

如下
main.c:270     if(SMB_DATA_IN[0]!= ~SMB_DATA_IN[1])
0x85ce  CLRW  X                   CLRW  X
0x85cf  LD    A,0x91              LD    A,0x91
0x85d1  LD    XL,A                LD    XL,A
0x85d2  CPLW  X                  CPLW  X
0x85d3  LD    A,0x90            LD    A,_SMB_DATA_IN
0x85d5  CLRW  Y                  CLRW  Y
0x85d7  LD    YL,A                LD    YL,A
0x85d9  LDW   0xa5,Y           LDW   0xa5,Y
0x85dc  CPW   X,0xa5            CPW   X,0xa5
0x85de  JRNE  0x85c8            JRNE  0x85c8
比较的是字节,结果执行的是比较字指令。
此帖出自stm32/stm8论坛

最新回复

                                 知道了,多谢香版和void_c。看来我以后如果想用~要小心点,呵呵。  详情 回复 发表于 2009-8-17 10:07
点赞 关注
 

回复
举报

55

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你看看手册,取反操作的数据类型是什么?

从你列出的代码看,取反操作的数据类型是整数类型;你给出了字符类型,编译器自动地帮你转换到了整数类型,所以产生这样的结果。

试试使用强制类型转换: if(SMB_DATA_IN[0]!= (unsigned char)~SMB_DATA_IN[1])
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
根据标准C,~运算有整形提升。

楼主自己没理解好C语言。
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 那| &也都有整形提升,岂不是我都要做强制类型转换?
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(中级)

5
 
                                 你可以自己想一想,| & 的整型提升与 ~ 有什么不同。
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 知道了,多谢香版和void_c。看来我以后如果想用~要小心点,呵呵。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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