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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© meng 高级黑马   /  2013-9-11 18:45  /  1887 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-13 08:51 编辑

    & 和 &&区别: & :无论左边结果是什么,右边都参与运算。
                      &&:短路与,如果左边为false,那么右边不参数与运算。
        | 和|| 区别:|:两边都运算。
                    ||:短路或,如果左边为true,那么右边不参与运算。
我的疑惑是:既然有两个的&&和||,要一个的还有什么用?

12 个回复

倒序浏览
| : 会检查每一个 条件的真伪,再做“或”运算
||: 按照条件写的顺序,直到一个为true时,后面的条件则不再检查,直接进入条件
& : 会检查每一个 条件的真伪,再做“与”运算
&&: 按照条件写的顺序,直到一个为false时,后面的条件则不再检查,直接跳出
&是位运算符,表示按位与运算。&&是逻辑运算符,会短路。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李政 于 2013-9-11 19:03 编辑

同意楼主的想法,似乎有了两个的,一个的就没有什么用了
回复 使用道具 举报
本帖最后由 垂天云 于 2013-9-11 21:14 编辑

&,&&,都是逻辑运算符;
&表示与,左右两边表达式都要判定,全真才真;
&&表示短路与,如果左边不成立,那右边就不用判定,如果左边成立(true)再进行右边判定。

区别如下:
& 可以是位运算符,例如:27&3是二进制与运算,27的2进制是 11011 ,3的2进制是00011,与的话应该是 00011,换成十进制还是3。

&& 是逻辑与:a==b && c==d 这个是逻辑运算,结果只能是0 或 1。


| 是位运算的或,|| 是逻辑运算的或
a | b , 无论如何,都会计算 a 和 b
a || b, 只有当 a 为假的时候才会计算 b
区别:同上.      

  位运算示例:

   运算符  名称   示例    说明
    &       位与    x&y     把x和y按位求与
    |       位或    x|y     把x和y按位求或
    ~       位非    ~x      把x按位求非
    ^       位异或 x^y     把x和y按位求异或
    >>      右移    x>>y    把x的各位右移y位
    <<      左移    x<<y    把x的各位左移y位
    >>>     右移    x>>>y   把x的各位右移y位,左边填0

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
Nice! 以前我也同你有一样的疑惑, 但我觉得存在即合理(程序员恶习, 我们应该舍弃), 今儿就重新刨根问底吧. 在编程细节中我们就非常提倡使用&&和||, 甚至将其单独列出, 期待下面精彩的回复.
回复 使用道具 举报
毕老师在视频中说过,有一种情况是短路可以成功运行,单个就运行失败
回复 使用道具 举报
本帖最后由 静以修身 于 2013-9-11 19:39 编辑

百度了一下,&存在还是有点道理的:看你的需求而定,比如If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0) y不会增长,它们还是有区别的,用哪个看你的需求决定。双 个比单个的效率高,所以单个双个都能用的情况下一般选择用双个。
回复 使用道具 举报
meng 高级黑马 2013-9-11 19:57:08
8#
1098918523 发表于 2013-9-11 18:56
| : 会检查每一个 条件的真伪,再做“或”运算
||: 按照条件写的顺序,直到一个为true时,后面的条件则不 ...

不错,很清晰
回复 使用道具 举报
meng 高级黑马 2013-9-11 20:02:50
9#
静以修身 发表于 2013-9-11 19:36
百度了一下,&存在还是有点道理的:看你的需求而定,比如If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0) y ...

明白了         
回复 使用道具 举报
存在肯定有其存在的道理!
这些功能上重复(其实这个不是重复)设计是为代码的效率和简洁存在的。
这个就好比for循环,有普通型for循环,有增强型for循环;要说使用,仅仅普通型的足以,而设计出增强型的主要就是某些情况下使用比较简洁且高效,比如在结合集合的使用中。
而这里的&、&&,|、||也是这种情况,如果只有一种也可以设计出程序,但是某些情况下就比较复杂了。比如楼上“静以修身”所举出的例子,如果需求是希望无论如何y都自增,那么使用&是不是简洁多了!!!
回复 使用道具 举报
meng 高级黑马 2013-9-11 20:09:09
11#
垂天云 发表于 2013-9-11 19:02
&,&&,都是逻辑运算符;
&表示与,左右两边表达式都要判定,全真才真;
&&表示短路与,如果左边不成立,那 ...

你说的很详细,NS。
我的理解是:单个的在两种情况下用,1、当做位运算的时候,
2、当逻辑运算的时候不能短路操作的时候,比如下面的同学回答的例子:If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0) y不会增长,如果题目中需要增长,就必须用单个的。其他情况,一律用两个的。

&& 是逻辑与:10 && 11 这个是逻辑运算,结果只能是0 或 1。
结果是0和1的能举个例子么?
回复 使用道具 举报
meng 高级黑马 2013-9-11 20:12:03
12#
EYE_SEE_YOU 发表于 2013-9-11 19:07
毕老师在视频中说过,有一种情况是短路可以成功运行,单个就运行失败

这个我倒是要去看看,在哪里?版主,现在这个回复总是要验证码,很恶心的。
回复 使用道具 举报
meng 高级黑马 2013-9-11 20:14:30
13#
张云飞 发表于 2013-9-11 20:08
存在肯定有其存在的道理!
这些功能上重复(其实这个不是重复)设计是为代码的效率和简洁存在的。
这个就好 ...

表示同意!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马