在c/c++中的&、|和&&、||的区别(易混淆)

来源:互联网 发布:a算法八数码问题 编辑:程序博客网 时间:2024/06/05 17:04

在c/c++中的&和|是位运算符,和它们处于相同地位的还有<<、>>、^、~。这两个运算符会使得参与运算的参数的每一位都进行运算。例如10和6相与,即1010&0110,得0010,也就是2.

但是&&和||却是逻辑运算符,在它们看来,除了0之外,其他的非零整数都可以看做true,所以如果10和6相与,结果会是true。

有的时候会发现在使用&&的地方可以使用&来替代。在大多数情况下确实都是可以的。这是因为在使用&&的时候,两侧如果都是非0值,那么结果就是true,而在使用&的时候进行相与运算,得到的结果一般也是这样,但是也会有偶然情况:例如10和5相与,即1010&0101,则结果为0,这时候的结果就是不一样的。

总之,它们两个是不一样的。

而且在使用&&的时候,如果第一个就是false,那么就不会再计算第二个参数,因为不管怎样,结果都会是false。这个被称为短路,对于||也是同样的。

总结一下:

&&是逻辑运算符,&是位运算符,在有些时候&&可以被&替代,但是这只能算作巧合。

另外&&还可以短路,在第一个参数是false的情况下,就会发生短路。||在第一个参数是true的情况下,也会发生短路。

0 0