独闷闷网

 找回密码
 立即注册
搜索
查看: 2959|回复: 3
收起左侧

[原创] “&”也可以做逻辑运算符,并说明“&”与“&&”的区别。

[复制链接]
发表于 2014-12-15 11:51:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 重庆-风雪 于 2015-4-14 22:38 编辑

在我们常规的用法中,“&”是位运算符,“&&”是逻辑运算符,比如,两个字节间的与运算,用&。两个条件是否都是真的判断用&&。
但容易被忽略的是“&”也可以作为逻辑运算符,区别是:用&的时候,比如A&B无论A的值是真还是假,都要判断B,
而用“&&”的时候:A&&B,只要判断A的值为假,就不在判断B的值,下面是测试代码和结果的截图:
测试代码.png 测试结果.png


百度上的答案(这个地方说的是JAVA当中的,只不过在C中用法是一样的,看我上面测试的代码就知道):
&和&&都可以用作逻辑与的运算符,表示逻辑与(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。http://zhidao.baidu.com/link?url=Oh3pQ7jv4G8Ota5o9zgFpkxFM0yZp_P0VYTxsshsZJzFZSB6v5eOjkkIBvW9pbJnvDu73G7EsBJo8X-c0dPQy_
朱兆琪51qq群讨论:
周宏-温州:
if((j==1000)&(number==1))和if((j==1000)&&(number==1))有区别吗?

风雪--重庆:
&和&&都可以。,&可以作逻辑运算。&&有短路功能.

鸿哥-深圳:
&和&&有很大区别的。&是运算符号,类丝加减乘除的运算符。&&是条件逻辑关系符号。性质完全不一样。比如,两个字节间的与运算,用&。两个条件是否都是真的判断用&&。

风雪--重庆:
鸿哥.&也可以作逻辑运算.

鸿哥-深圳:
那是巧合的。你关健还是要理解它们的区别。

风雪--重庆:
不是巧合,区别是&&有短路功能.

鸿哥-深圳:
不要用短路这么抽象的词。大家都不懂是什么意思。

风雪--重庆:
就是&&作运算时,如果判断第一个为假,就不判断第二个了.短路这个词是书上这么说的.

鸿哥-深圳:
你的结论正确。但是不能说明问题。&和&&有很大区别的。&是运算符号,类似加减乘除的运算符。&&是条件逻辑关系符号。性质完全不一样。比如,两个字节间的与运算,用&。两个条件是否都是真的判断用&&。

风雪--重庆:
我想表达的就是&也可以作逻辑运算,并且说了它们的区别,我知道&是位运算符,但是它也可以作逻辑运算符.

鸿哥-深圳:
即使可以,我觉得还是应该分开在不同的场合用,否则容易出错。


风雪--重庆:
鸿哥说的是!


乐于分享,勇于质疑!
发表于 2014-12-15 14:41:28 | 显示全部楼层
一个是逻辑与,一个是按位与
乐于分享,勇于质疑!
发表于 2014-12-15 17:01:34 | 显示全部楼层
这次编辑比上一次有进步。但是没有很好压缩,没有去掉一些水分。我们整理的一定要提取有价值或者有争议的信息。并且同一个人讲的话可以根据情况放在一起,减少人称的使用。整理步骤是这样的,你要先把内容复制在txt文档,整理后再复制到论坛,然后上颜色,不要复制在word文档。比如,我帮你整理后是现在这个样子的。
乐于分享,勇于质疑!
 楼主| 发表于 2014-12-16 18:58:54 | 显示全部楼层
jianhong_wu 发表于 2014-12-15 17:01
这次编辑比上一次有进步。但是没有很好压缩,没有去掉一些水分。我们整理的一定要提取有价值或者有争议的信 ...

嗯,谨记鸿哥教诲!鸿哥果然功力深厚!
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2021-6-20 17:09 , Processed in 0.148861 second(s), 21 queries .

快速回复 返回顶部 返回列表