逻辑非!与按位非~的区别
时间:12-23 14:57 阅读:2213次
*温馨提示:点击图片可以放大观看高清大图
简介:一直纠结于这两个C语言符号的区别之中。直至遇到一个项目死活找不到问题所在,最后发现是用错了这两个符号后,才有兴趣研究一番。
在印象中。这两个符号!与~都是取反的意思。但是不同的地方是:
逻辑非!是只有两种状态,要么0要么1.例如
unsigned char a,b,A,B;
a = 10;
b =!a;
b = 0
不管a是多少。只要大于0那么b的结果都是1.反之,如果a等于0,b永远都是1
按位非则不同。
A = 10;
B = ~A;
B = 0xF5;
两种情况如果对IO直接操作的话。
MOV R7,#02H ;赋值
MOV A,R7
ADDA,#0FFH ;加一个最大值
CPL C ;取进位反。
MOV IO_PIN,C
MOV A,R7
CPL A ;选按位反
ADD A,#0FFH ;再加一个最大值
MOV IO_PIN,C ;取进位
生成的汇编如上。可以看出两种方式对操作方式都是不一样的。刚好反过来。但结果都是一样的
bit i;
i = 0x02;?
此时的i 值是0 还是1
答案是1,不管赋什么值。只要大于1.结果都为1.