打印

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

[复制链接]
1499|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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);
  }

                                 



bxy.jpg (63.35 KB )

赋值问题

赋值问题

相关帖子

沙发
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)这样问什么不行

使用特权

评论回复
5
SLEET1986| | 2013-12-17 14:30 | 只看该作者
hceng 发表于 2013-12-17 14:18
这个问题我知道了,在b前面加个volatile,不过还有个问题,如何把P1和P2口的数据取反然后合成一个16位数据 ...

注意数据类型,方法是对的

使用特权

评论回复
6
黄小俊| | 2013-12-17 21:54 | 只看该作者

使用特权

评论回复
7
hceng|  楼主 | 2013-12-17 22:34 | 只看该作者
SLEET1986 发表于 2013-12-17 14:30
注意数据类型,方法是对的

知道了,强制转换的优先级51和c不一样,c在取反后面51在最前面

使用特权

评论回复
8
NE5532| | 2013-12-18 09:04 | 只看该作者
看不懂楼主什么意思?“b就有值了”是什么意思?一个变量不管操作不操作,永远都有一个值啊,如果楼主的意思是还没操作,就有想要的值了,就得看一下是不是特殊值,比如00或者FF,或者是“上一次”程序执行时候留在内存里的值。

使用特权

评论回复
9
rocdove| | 2013-12-19 00:37 | 只看该作者
好多细节问题啊

使用特权

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

本版积分规则

17

主题

48

帖子

0

粉丝