在c/c++中的&、|和&&、||的区别(易混淆)
2016-10-24 22:16
731 查看
在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之外,其他的非零整数都可以看做true,所以如果10和6相与,结果会是true。
有的时候会发现在使用&&的地方可以使用&来替代。在大多数情况下确实都是可以的。这是因为在使用&&的时候,两侧如果都是非0值,那么结果就是true,而在使用&的时候进行相与运算,得到的结果一般也是这样,但是也会有偶然情况:例如10和5相与,即1010&0101,则结果为0,这时候的结果就是不一样的。
总之,它们两个是不一样的。
而且在使用&&的时候,如果第一个就是false,那么就不会再计算第二个参数,因为不管怎样,结果都会是false。这个被称为短路,对于||也是同样的。
总结一下:
&&是逻辑运算符,&是位运算符,在有些时候&&可以被&替代,但是这只能算作巧合。
另外&&还可以短路,在第一个参数是false的情况下,就会发生短路。||在第一个参数是true的情况下,也会发生短路。
相关文章推荐
- c与c++的区别 <转> 深有感触
- C++中头文件使用""与<>的区别
- <C++学习笔记>引用中的&和&&区别
- C++ 中的&:“&引用” 和“&取地址符”的区别和作用
- <MFC>CString和<C++>标准库string的区别,及判断字符串是否为空
- "post/get"的区别
- c++中运算符&,&&,|,||的区别
- <Effective C++>读书笔记-6
- 4.3.2,a 和&a 的区别
- "=="和equals方法有什么区别?
- [收藏]C++ Tips(12)--||和&&的语句执行顺序
- 详解C++中令人头痛的&和*操作符
- 'scalar deleting destructor' 和 'vector deleting destructor'的区别
- &和&&的区别: ("|"与“||”同理)
- "=="和equals方法究竟的区别?
- &与&&, |与||区别
- && 和& 的区别
- c/c++中的&amp;和&amp;&amp;几个解释比较好的网址
- <jsp:include page="">与<&@ include file="">的区别
- &和&&区别