黑马程序员技术交流社区

标题: 逻辑操作(&,|,^)与条件操作(&&,||)的区别? [打印本页]

作者: 吴文华    时间: 2012-2-17 09:14
标题: 逻辑操作(&,|,^)与条件操作(&&,||)的区别?
本帖最后由 吴文华 于 2012-2-17 13:09 编辑

我想问下  逻辑操作(&,|,^)与条件操作(&&,||)的区别?  看视频看的有点糊了!
作者: 王涛    时间: 2012-2-17 09:36
&&被称为短路与,&&运算表达式从左往右计算时,如果发现一个false值,就放弃继续运算,直接将false作为最后整个表达式的结果并返回,
&被称为逻辑与,该运算符在计算表达式结果时,表达式的每个操作数都要参与计算,然后才得出整个表达式的计算结果。
|和||运算符的区别与&和&&的情况类似,||运算符如果遇到true操作数就放弃后续运算,将true作为整个表达式的计算结果并返回。
它们两者的执行效率不同,尽量采用执行效率优的。
作者: 朱辉    时间: 2012-2-17 09:55
&,|,^是整数运算符  ; &&,||是逻辑运算符
例如:string a = 1;
string b = 2;
if(a ==2 && b == 2);
a==2已经为false,所以&&后面的b==2就不用判断了,结果是false
如果改为&,则&左右两边的都要参与判断,结果是false
|和||运算符的区别与&和&&的区别类似
作者: 彭小芳    时间: 2012-2-17 10:04
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

     &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长

     &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

     ||用作逻辑运算符,当两个操作表达式全部为false时,结果为false, 当有一个为true时,结果为true

     | 用作位运算符,|两边的操作数按二进制位运算,两个0时为0,否则为1

     ^用作位运算符,两边的操作数按二进制位运算,相同为0,不同为1
作者: 花开~的季节    时间: 2012-2-17 10:34
写文字估计你也不想看,建议你去看看毕老师讲的,很简单的例子,比文字效果更佳
作者: 张开开    时间: 2012-2-17 10:35
逻辑操作(&,|,^)与条件操作(&&,||)有区别,比如:
int a,b;
a&b和a&&b都是当a和b都是真的情况下为真,有一个为假就为假。区别是a&b中,不管a是真是假,b都会进行判断,而a&&b中,如果a是假的话,b 就不再判断了,即判断b是在a为真的前提下,也就是有条件的。
而|和||的区别类似
而^是异或判断,即看看两边是不是不同,不同的话就为真,相同的话就为假




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2