&、|与&&、||的比较

& 按位与
&& 逻辑与 

&、|与&&、||的比较:后者的性能比较好,只要看第一个操作符即可,如果&&的第一个操作数即为false,则不用看第二个操作数,结果直接为false,如果||的第一个操作数为true,则不用考虑第二个操作数,结果直接为true。但&、|的操作数都必须计算到。

&、|还可以进行数值的操作,用法:第一个操作数中的每个位都与第二个操作数中相同位置上的位进行比较,得到结果。

如:4&5=100&101=100

2008-04-21 17:01

之所以说相同,是针对他们各自的运算对象来说的。
对于(&&,||),运算的对象是逻辑值,也就是True/False
运算结果只有下列四种情况。
True && True = True
True && False = False
False && True = False
False && False = False

True || True = True
True || False = True
False || True = True
False || False = False

对于(&,|),运算的对象是位,也就是1/0
运算结果只有下列四种情况。
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

&&和&对于他们各自的运算对象来说,结果是一样的。
同理,||和|也是一样的。

你说到的
5&&2
的运算结果,是这样对待的。
首先5,非零,即为True
2,非零,True
True&&True = True
结果即为True。整个的运算过程是需要做变换的。并不是直接使用操作数的二进制直接比较。所以结果是不同的。在比较的时候,True应该会被转成类似11111111这样的二进制的值,False可能会转成00000000。

这里的一样,说的是针对运算对象。
&&的运算对象是True/False 不管你使用的是什么类型的表达式,他首先要转换为True/False中的一个,然后才参与运算。
&的运算对象就是0/1,不需要转换,有多少位直接计算多少位就可以了。


原文地址:https://www.cnblogs.com/zhouyunbaosujina/p/3123201.html