Java基础:&与&&,|与| |的联系与区别(详解及示例)

&与&& 的联系与区别

一、&与&&的相同点

  &与&& 都可作为 逻辑“与”的运算,即当运算符两边表示式结果都为True时,运算结果返回True;否则当某一表达式为False时,运算结果返回False 。

二、&与&&的不同点

1、& :“按位与”

  “按位与”:就是说,当两边表达式不是判断(a>b & a>c)而是数字如:1 & 8 ,‘&’就作为按位“与”运算;即将两个数字进行二进制位“与”运算:当两个相应二进制位都为1时,结果位为1

​   特别注意的是:"结果位为1,而不是结果返回1;也就是说 返回的结果是某个值而不仅仅是0或1

​   例如 :在java中int类型是4kb也就是32位;(略去前面几位,只写后4位或后8位)

  1 & 8:‘1’ 的二进制表示为 0001 ;‘8’的二进制表示为 1000 ;则1&8表示为 0001&1000 = 0000 ,再转十进制返回值为 0 ;

  23 & 15:‘23’的二进制表示为 0001 0111 ;‘15’的二进制表示为 0000 1111 ;则23&15表示为 0001 0111 & 0000 1111 = 0000 0111 ,转十进制返回值为 7

​ 上面例子只涉及到正数, 负数也是相同的性质,但负数的二进制是用补码表示。那负数的二进制如何表示:

  以 -9 为例:步骤如下(只讲步骤,具体运算实例就不再详述)

1.   -9 的绝对值:9的二进制位 0000 1001, 称该码为**原码**。

2.   上述‘原码’的基础上“取反”得:1111 0110 ,称该码为**反码** 。

3.   最后在‘反码’的基础上“加1”得:1111 0111 ,称该码为**补码**,即该码为负数的二进制表示。
2、&&: “短路与”

  这个很好理解。即当第一个表达式为False时,将不再执行第二个表达式(无论表达式是否抛出异常),直接返回False。

  但需要注意的是:使用“&&”时,两边的表达式一定是判断表达式即 返回的结果是True和False;若两边表达式为数值(1 && 8 或 8>1 && 8),将出现语法错误,程序编译无法通过。



| 与 | | 的联系与区别(和上述&与&&原理相同)

一、 | 与 | | 的相同点

  | 与| | 都可作为 逻辑“或”的运算,即当运算符任意一个表示式结果为True时,运算结果返回True;仅当两个表达式都为False时,运算结果返回False 。

二、| 与 | | 的不同点

 1. | :“按位或”

  和&类似,进行二进制运算;但与&的区别是当表达式为数值时,将两个数字进行二进制位“或”运算:任意某个二进制位为 1 时,结果位为 1

  例 7|8 :0111 | 1000 = 1111 ,转换十进制返回值为 15 。

  例 1|9 :0001 | 1001 = 1001,转换十进制返回值为 9 。(不再具体详述,参考上述&“按位与”运算)

 2. | | :“短路或”

  当第一个判断表达式为True时,不再执行后面的判断表达式(第二个表达式不会运行),直接返回True。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值