打印

请教一个关于C程序的疑问

[复制链接]
1668|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大家帮我看看这段程序.我是个初学者.当然我在看书的过程中,也有不少的疑问.如我有一段程序看不懂时.我就会在keil 上把这段程序copy下来.修改一下.看运行过程中的变化.例如以下这段,

#define uchar unsigned char
#define uint  unsigned int
#include "reg52.h"
#include "intrins.h"
void main()
{ static  bit  KMark; //,,,,
static  bit  KFunc1; //用于S3键
uchar tmp;
    P3|=0x3c;    //按按键的各位置1
tmp=P3;
tmp|=0xc3;    //未接键的各位置1
tmp=~tmp;
if(!tmp)    //如果结果是0表示无键被按下
{ KMark=0;   
  KFunc1=0;
  return;     
}
P1=0;
}


当然我的光标位置在tmp=p3;这一行.这里我就不明白了tmp 的值为什么就成了0xFF.
我认为应是0x3C.

但是我仔细发现左边的那个绿条不是连贯的.在tmp=p3;(赋值运算)后,断了.然后接着有一个按位或运算.我的光标在tmp=p3.这里停了两下.第二下tmp的值变成了0xFF.居然连0x3c也不显示出来.

if(! tmp) 这一句我有些不明白.如我按下p3.4时 到tmp=~tmp;时tmp的值是0x10.再按单步运算就跳到p1=0;了.我不明白(! tmp)是怎么个算法. if 语然只判断真和假.我认为的意思是1=真 0=假 .当我什么不按下.! tmp 的值是0x00,这个逻辑非 是不是和按位取反的运算一样呢. 那不就是成了0xFF, 我主要是想了解逻辑非是怎么个回事.

   感谢谢高手指点迷津.

当然我 用 if (tmp) 代替 if (! tmp) 是否可行?

相关帖子

沙发
suolangte|  楼主 | 2009-9-26 20:29 | 只看该作者
我终于明白,取反和逻辑非的作用了..
取反 只是把数里的0和1 颠倒过来
非就是把整个数 取反..  如个整个数!=0 就是1 非运算就是 0
反之就是 1

使用特权

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

本版积分规则

个人签名:学习,学习再学习

6

主题

21

帖子

0

粉丝