对于一些新手来说,很多时候搞不清楚&和&&的区别,特此在这里整合说明一下,方便以后查看
首先想一个问题:什么是位(bit)?
很简单,位(bit)就是单个的0或1,位是我们在计算机上所作一切的基础。计算机上的所有数据都是用位来存储的。一个字节(byte)由八个位组成,一个字(word)是二个字节或十六位,一个双字(dword)是二个字(words)或三十二位。
使用位运算的好处是可以将byte, word 或 dword 作为小数组或结构使用。通过位运算可以检查位的值或赋值,也可以对整组的位进行运算。
有6种位运算:
& 与运算
| 或运算
^ 异或运算
~ 非运算(求补)
>> 右移运算
<< 左移运算
(1)与运算(&)
双目运算。二个位都置位(等于1)时,结果等于1,其它的结果都等于0。
1 & 1 == 1
1 & 0 == 0
0 & 1 == 0
0 & 0 == 0
(2)或运算( | )
双目运算。二个位只要有一个位置位,结果就等于1。二个位都为0时,结果为0。
1 | 1 == 1
1 | 0 == 1
0 | 1 == 1
0 | 0 == 0
(3)异或运算(^)
双目运算。二个位不相等时,结果为1,否则为0。
1 ^ 1 == 0
1 ^ 0 == 1
0 ^ 1 == 1
0 ^ 0 == 0
(4)非运算(~)
单目运算。位值取反,置0为1,或置1为0。非运算的用途是将指定位清0,其余位置1。非运算与数值大小无关。
(5) 移位运算(>> 与 <<)
将位值向一个方向移动指定的位数。右移 >> 算子从高位向低位移动,左移 << 算子从低位向高位移动。
下面来说说 & 和 && 的区别,以及 | 和 || 之间的不同
&&相当一个开关语句,就是说如果&&前面值为false那么他就不继续执行后面的表达式;而&不管前面的值为什么,总是执行其后面的语句。
&& 和 || 是boolean的逻辑运算, 返回为bool值
&是位运算符,它会将两边的运算都计算出来,再进行与运算; &是用来处理0101这样的2进制字符的位运算的。
同样的道理,|| 也是布尔逻辑运算符,只要有一边的运算结果是true,它会马上返回true。