奇怪的赋值问题,求高手解答

[复制链接]
 楼主| hceng 发表于 2013-12-17 14:03 | 显示全部楼层 |阅读模式
本帖最后由 hceng 于 2013-12-17 14:06 编辑

程序只运行到j,怎么b就有值了??

#include <REGX51.H>
#include "MyType.h"


                                   void main(void)
                                   {
                                   uchar8 i=0xf0,a=0x0f;

                                   uint16 j,b,c;
                                   P1=0xf0;
                                   P2=0x0f;
                                   c=P1;
                                   
                                           j=(~i<<8)+a;
                                        b=(~P2<<8);
                                        b|=~P1;
                                       
                                           while(1);
  }

                                 



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| hceng 发表于 2013-12-17 14:06 | 显示全部楼层
程序只运行到j,怎么b就有值了???
 楼主| hceng 发表于 2013-12-17 14:08 | 显示全部楼层
编译器的优化?
 楼主| hceng 发表于 2013-12-17 14:18 | 显示全部楼层
这个问题我知道了,在b前面加个volatile,不过还有个问题,如何把P1和P2口的数据取反然后合成一个16位数据??
b=(~P2<<8)+(~P1)这样问什么不行
SLEET1986 发表于 2013-12-17 14:30 | 显示全部楼层
hceng 发表于 2013-12-17 14:18
这个问题我知道了,在b前面加个volatile,不过还有个问题,如何把P1和P2口的数据取反然后合成一个16位数据 ...

注意数据类型,方法是对的
黄小俊 发表于 2013-12-17 21:54 | 显示全部楼层
 楼主| hceng 发表于 2013-12-17 22:34 | 显示全部楼层
SLEET1986 发表于 2013-12-17 14:30
注意数据类型,方法是对的

知道了,强制转换的优先级51和c不一样,c在取反后面51在最前面
NE5532 发表于 2013-12-18 09:04 | 显示全部楼层
看不懂楼主什么意思?“b就有值了”是什么意思?一个变量不管操作不操作,永远都有一个值啊,如果楼主的意思是还没操作,就有想要的值了,就得看一下是不是特殊值,比如00或者FF,或者是“上一次”程序执行时候留在内存里的值。
rocdove 发表于 2013-12-19 00:37 | 显示全部楼层
好多细节问题啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

48

帖子

0

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

17

主题

48

帖子

0

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