逻辑运算符中的 & 和 | 的误区

关于"逻辑运算符"中的&和|的误区

昨晚有同学问我&和|的结果应该是true和false.但为什么能连接两个数值?

int i = 5 & 12;
System.out.println(i);

结果是:4![

int j = 5 | 12;
System.out.println(j);

在这里插入图片描述
如上就是我学生遇到的问题.

在此说明下,此处的&和|并不是所谓的逻辑运算符,而是二进制运算符中的按位与和按位或.何解?

二进制与运算符(&):两个二进制数像十进制加法一样右对齐,上下都为1结果为1,只要有一个0结果为0,当然上下两个数对应位都为0的话结果也为0.
我们都知道int类型是32位二进制掩码,下面我为了方便,只保留低八位演示讲解:

5的二进制是:00000101
12的二进制是:00001100

    00000101
&   00001100
-------------------
    00000100
 

大家注意,二进制的运算一定保证右对齐,通过上面说明都为1结果为1,按位与运算之后为00000100,这个结果就是4了.

二进制中的按位或运算符(|):首先将十进制数转换成二进制数,两个二进制数值右对齐,上下只要有一个1,结果为1,上下都为0结果为0.

    00000101
 |  00001100
 ------------------
    00001101

通过上面的或运算,运算结果为00001101即13.

通过上面的介绍,相信大家应该了解了,当&作为二元运算符,左右两边都是数字时,并不是我们所谓的逻辑与运算符,而是二进制运算符中的按位与,同理当|作为二元运算符,左右两边都是数字时也不是所谓的逻辑或,而是二进制运算符按位或.

当然,如果"&“和”|“左右两边是boolean值或者是判断表达式(用关系运算符连接的表达式,本质是boolean值)的话,那么”&“表示逻辑与,”|"表示逻辑或.

在此,引入下百度查到的运算符的优先级:

在这里插入图片描述

在这里提醒小伙伴注意,逻辑与(&)优先级大于逻辑或(|)优先级大于短路与(&&)优先级大于短路或(||).

为了方便大家记忆,大家可以简要记住与大于或,逻辑的大于短路的.
在这里插入图片描述

上面代码希望对大家有所帮助.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值