A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马无敌 中级黑马   /  2015-6-25 20:17  /  7979 人查看  /  32 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
关于这个问题,我就一直没搞懂,请大家解释一下。。。

最佳答案

查看完整内容

&是一个位运算符,数据在内存里面都是按二进制存储的,所以有时候为了把数据按二进制输出,或者特定的计算某一位的时候才用这个,这个在针对硬件编程里面用的比较多,&&这个是一个逻辑关系运算符,两边可以是关系表达式,也可以是两个算术表达式,两边的结果同时为真(C语言里只要不为0就是真)的时候,结果为1,否则有一个为假则为假,且如果前面为假,后面的表达式将不再计算,例如: 结果:c=0,a=2,b=3,因为a>3为假,所以逻辑 ...

32 个回复

倒序浏览
&是一个位运算符,数据在内存里面都是按二进制存储的,所以有时候为了把数据按二进制输出,或者特定的计算某一位的时候才用这个,这个在针对硬件编程里面用的比较多,&&这个是一个逻辑关系运算符,两边可以是关系表达式,也可以是两个算术表达式,两边的结果同时为真(C语言里只要不为0就是真)的时候,结果为1,否则有一个为假则为假,且如果前面为假,后面的表达式将不再计算,例如:
  1. int a=2,b=3;
  2. int c= a>3&&(b++)>0;
复制代码
结果:c=0,a=2,b=3,因为a>3为假,所以逻辑表达式的值为0,赋值给c,并且后面的表达式不执行,b++不成立,所以b的值仍然为3.
回复 使用道具 举报
主要讲讲用法区别,就是什么时候用&,什么时候用&&
回复 使用道具 举报
&&又称短路与,就是当该运算符前一个表达式为false时,就不再运算该运算符后面的表达式。比如表达式1&&表达式2,当表达式1的结果是false时,不再运算表达式2,直接返回false。而&两边的表达式都要运算。

点评

正解,顶一个  发表于 2015-6-28 20:40
回复 使用道具 举报
&是逻辑与、并且。有假则假
&&是短路与。 单从结果上看和&是一样的,例如if (x==1&x==2),如果前面x==1出现了false,后面也执行,
if (x==1&&x==2),如果前面x==1出现了false,后面x==2就不执行了。
回复 使用道具 举报
cemabenteng 发表于 2015-6-25 20:35
&是逻辑与、并且。有假则假
&&是短路与。 单从结果上看和&是一样的,例如if (x==1&x==2),如果前面x==1出现 ...

谢谢了,我明白了
回复 使用道具 举报
kime 发表于 2015-6-25 20:29
&&又称短路与,就是当该运算符前一个表达式为false时,就不再运算该运算符后面的表达式。比如表达式1&&表达 ...

我知道了
回复 使用道具 举报
通常写两个&&,因为有短路情况会提高性能,在javascript中还可以利用&&的短路特性,能写出非常简洁的语句。ps:知道了要改为已解决的吧
回复 使用道具 举报
刀叨 初级黑马 2015-6-25 21:16:32
9#

这个不对if(x==1&x==2);与if(x==1&&x==2);是不一样的,第一个判断的是(假如定义的x=1,且占1个字节),x==1为真,结果为1,x==2为假结果为0,再计算if(1&0)的值
  1.      0000 0001
  2. &  0000 0000
  3. -----------------
  4.     0000 0000
复制代码
为if(0);
后者if(1&&0);现在中间是关系运算,同真为真,有假必假,if(0);虽然看着结果相同,但是原理不同。
回复 使用道具 举报
Diors 中级黑马 2015-6-25 21:26:51
10#
&&是逻辑判断,&&两端的表达式都成立则为true;&是位运算符,叫按位与,同一位上都是1,结果这个位才为1
回复 使用道具 举报
Diors 中级黑马 2015-6-25 21:28:05
11#
Diors 发表于 2015-6-25 21:26
&&是逻辑判断,&&两端的表达式都成立则为true;&是位运算符,叫按位与,同一位上都是1,结果这个位才为1 ...

急需技术分,如果觉得正确有用,请采纳
回复 使用道具 举报
&是位运算符,运用于整型的二进制位之间的运算,相应位同 为1,结果才为1;&&是逻辑运算符,是二目运算符,参与运算的两个量都为真,结果才为真,否则为假
回复 使用道具 举报
数据在内存中是2进制形式存储的,&是按位与。
例如
7 在内存中是00000111,
15在内存中是00001111,
按位与就是上面这8位数据分别进行&&运算后再放在原位置,结果是00000111。

&&操作的是boolean数据true和false,在内存中表现就是 1 和 0 。
&&常用于条件判断语句中,如if、while、for、do……while
&常用于运算语句中,数值转化等。
回复 使用道具 举报
已经有答案了,不用管我。
回复 使用道具 举报
我来看看 具体 怎么讲
回复 使用道具 举报

区别在于:& 前面的是否成立,&后面的也都要判断,而 && 则是:一但前面的不成立,后面的就不判断了。
举个例子:
int i =3
if(i > 4 & i = 5 ){
这个就会判断 i 是否大于 4,同时也会判断 i 是否等于5
};
而 && :
int i =3
if(i > 4 && i = 5){
这个就会判断 i 大于 4 是否成立,如果不成立,i = 5 就不执行了。
};
我也是刚学,如果写的不对,我们一起学正确的。
回复 使用道具 举报
他俩结果是一样的,但是&&更高效,所以用的比较多&是逻辑与、并且。有假则假 &&是短路与。 单从结果上看和&是一样的,例如if (x==1&x==2),如果前面x==1出现了false,后面也执行,
回复 使用道具 举报
&&是短路的,只要前面一个表达式为真后面的表达式就不会去执行,而&则是不管前面的表达式是否为真,后面的表达式都会要执行,所以说&&比&效率高,一般都用&&。但是有时候写程序就是想每次都执行后面的表达式,比如i++<0&j-->0中,我就想每次运算,不管i自加后是否小于0,j都要做自减,这时候就必须用&。此外&还有一个功能就是位的与运算,比如二进制01100100&10011101=00000100
回复 使用道具 举报
&和&&都是逻辑判断用的,

  &&如果表达式左边已经是false了,
    右边就不再计算了。

  &无论如何都要计算表达式的两边。
&&比&效率高点~
回复 使用道具 举报
好好看看老师的课堂总结吧
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马