« 上一篇下一篇 »

& 与 && 的区别

我们先来看一小段代码,


如上,我是打算判断P1口低两位的状态,从而来进行相应的操作,请看,这里我用了'&'运算符(位与运算符),而不是用‘&&’,当然,我开始用的是‘&&’,但是很明显,结果是错的,为什么呢?下面我就来分析一下,大神请莫笑!

‘&&’为逻辑与,即为按字节进行的与操作,如  A && B == 0;在这里,A 若是大于1,则无论A为何值,全部都是看作了1,B同理,即 A && B 的结果只有两种可能,非0即1,这里不是我们所需要的,因为我们上面的代码用于判断P1口低两位的状态,而低两位的状态取值一共有4种,即 00 (0)、01(1)、10(2)、11(3),(上面代码只是其中一种取值的判断),很显然,在这里,‘&&’不符合我们的要求,因为它不可能判断这四种情形,甚至是只能够判断P1口低两位全为0的情况,其他的情况它区分不了。这里顺带提一下,‘&&’运算符,假如左边的表达式为假(0)的话,则不会计算右边表达式的值,此时结果显然已经为0了。

我们再来看一下‘&’,它的官方解释是“按位逻辑与”,如上代码,0x03用二进制表示即为 0000 0011,然后我们用P1和这个二进制数相与,很显然,我们可以读取出P1口低两位的值,假如P1为 0000 0001 & 0000 0011 = 1、假如P1为 0000 0011 & 0000 0011 ,结果则为3,因为低两位都为1,由此可见,利用‘&’运算符,我们可以对P1口低两位的状态进行读取,当然,其他位也是可以的,这样的话,我们就能够在读取出P1口低两位的状态值后,根据它不同的状态来对它进行相应的处理(功能实现)。

OK,完毕!