黑马程序员技术交流社区

标题: &和&&的区别 [打印本页]

作者: 李朋霏    时间: 2012-7-20 14:11
标题: &和&&的区别
知道&&是‘与运算’,那么&呢?
作者: 黄涛    时间: 2012-7-20 14:16
&是 位与运算
|是 位或运算 就是先转换成二进制位 然后再运算

比如
假如1 && 2 为 true
      1 & 2可以理解为 01 &10
明白否?


作者: 李朋朋    时间: 2012-7-20 14:18
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
同时,二者也有区别,比如:a&&b,其中如果a=false,则不会再去判断b的结果,a&&b直接为false,而a&b,即使a=false,表达式a&b还会去判断b的值。
作者: 许庭洲    时间: 2012-7-20 14:20

1,&&是条件与运算符号,例如,if((a==0)&&(b==0)) 表示a等于0并且b也等于0,if中的条件就成立;
2,&是位逻辑与运算符号,位逻辑与运算将两个运算对象按位进行与运算。
     与运算的规则:1与1等于1,1与0等于0。
     例如: 10010001(二进制)
           &  11110000
----------------------------------------------------------------------
               10010000
作者: 李朋霏    时间: 2012-7-20 14:46
明白了 ,前者用于条件运算,后者用于二进制位逻辑运算。
作者: 钱灿    时间: 2012-7-20 14:47
如果&&运算符的第一个操作数是false, 就不需要考虑第二个操作数的值了, 因为无论第二个操作数的值是什么, 其结果都是false.
而&运算符总是要计算两个操作数.
作者: 小高    时间: 2012-7-20 17:49
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).
作者: 许楠    时间: 2012-7-20 17:50
&和&&都可以用作逻辑与的运算符,表示逻辑与(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。
作者: 京鱼龙    时间: 2012-7-20 18:06
&&  当左边是false时,右边就不参与运算了。
&无论什么结果,左右两边都运算。
例如:
if(2<2&1<2)//&左边的数虽然是false,但是也要进行右边的比较。这样比较浪费时间
if(2<2&&1<2) //&&左边的数位false,右边的就不用运算了。一般判断语句都用&&

作者: ARMdong    时间: 2012-7-21 12:37
本帖最后由 ARMdong 于 2012-7-21 12:39 编辑

&&
表达式=(表达式1&&表达式2)  
表达式1     表达式2     表达式
  真               真             真
  真               假             假
  假               真             假
  假               假             假

逻辑&表示将两个二进制数值进行按位与,举个例子来说:1001&1010:
            1001
        &  1010
结果:  1000
不知这样解释你能不能理解
作者: 王超    时间: 2012-7-21 16:12
&和&&都可以用作逻辑与的运算符,表示逻辑与(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。
作者: 宫明星    时间: 2012-7-21 16:40
这是我听毕老师课程时做的笔记,可以参考下。
&和&&:
&无论左边是真是假,右边都会运算
&&左边是假的时候,右边不运算。
|和||:
|:两边都运算。
||:当左边为真(true)时,右边不运算。

作者: 李根    时间: 2012-7-22 15:54
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false,&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01
作者: 刘旺    时间: 2012-7-23 15:53
二元运算符 (&) 为整型和 bool 类型预定义了二进制 & 运算符。对于整型,& 计算操作数的按位“与”。对于 bool 操作数,& 计算操作数的逻辑“与”;也就是说,当且仅当两个操作数均为 true 时,其结果才为 true。条件“与”运算符 (&&) 执行布尔操作数的逻辑“与”运算,但如有必要,只计算第二个操作数。它与二元运算符 (&)很像,不同的是,如果 x 为 false,则不计算 y(因为不论 y 为何值,与操作的结果都为 false)。这被称作为“短路”计算。


作者: 张寅平    时间: 2012-7-23 16:32
& :按位“与”运算符将参数强制为匹配的数据类型。 & 运算符查看两个表达式的二进制表示形式的值,并对它们执行按位“与”运算。 参数的数据类型决定此运算符所返回的数据类型。
&& :逻辑“与”运算符,当且仅当两个表达式均为 true 时,结果才为 true。 如果任一表达式计算结果为 false,则结果为 false
“&”的优先级高于“&&”。
作者: 陈云帆    时间: 2012-7-25 23:40
1、&既是位运算符也是逻辑运算符,&&只是逻辑运算符。
2、&与&&同时作为逻辑运算符时&&是短路的,而&并不短路。
3、&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,
我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位。

不过在程序中还是常用&&的好,因为它的短路功能节约内存,提高代码的运行速度。
当然代码少的话体现不出来,但是在实际开发中就大有用处了。
作者: 黄锐    时间: 2012-7-26 00:08
&和&&都是逻辑运算符,主要区别是在于后面的&&是短路的,
也就是说当使用&时,要是&前面的表达式的结果是true,后面的条件也是true时结果才是真
要是&前面的表达式的结果是true,后面的条件是false时结果是假,
要是&前面的表达式的结果是false,后面的条件是true时结果是假,
要是&前面的表达式的结果是false,后面的条件是false时结果是假,
&前后表达式的结果都要去判断。

但是使用&&时是只要前面的表达式的结果是false,则后面的表达式的结果就不用去判断了,结果就是false,
当前面的表达式的结果是true时,才去判断后面的表达式的结果若是false,结果就是false
若是true,则结果就是true。相对来说比&得效率要高一些。
作者: 王辉    时间: 2012-7-26 07:30
&是位运算符,表示按位与运算
&&是逻辑运算符,表示逻辑与。说明:逻辑与运算只有当’&&‘符号的前后表达式皆为true时才为true。
作者: 吴立杰    时间: 2012-7-26 07:49
&和&&都可以用作逻辑与的运算符,表示逻辑与(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。
作者: 黑马李果    时间: 2012-7-26 12:31
&可以进行与运算也可以进行位运算。
与运算:跟&&一样都是两边都为true,结果才为true, 否则为false 。但是&效率比&&效率低,因为用&&时,只要左边的为false了,右边的就不用算了,因为已经知道结果了,但是用&的话,即使左边为false,依然要去计算右边的值。
位运算:将&两边的数对应的二进制位进行比较,如果都是1,那么该位就为1,如果有一个为0,该位就为0.
作者: 夏威夷海风    时间: 2012-7-26 18:56
&:按位与
|:按位或
&&:逻辑与
||:逻辑或
这里需要注意的是 && 好|| 有短路功能,比如&& 如果第一个表达式为false,则不再计算第二个表达式。




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