Java 位运算符详解

Java 位运算符详解

前情提要:

因为 位运算符 是按照二进制位操作 整数 的, 涉及到 二进制 和 整数存储方式(原码、反码、补码)
不懂的话可以参考 计算机底层如何存储不同的数据

一、简介

位运算符: 是按照 二进制位 进行运算的运算符, 左右两边都是整数。

  • 位运算符的运算过程都是基于 补码运算,但是看结果,我们得换成原码,再换成十进制看结果
  • 从二进制到十进制都是基于原码
  • byte、short、char 在使用 位运算时 按照 int 类型处理
  • 位运算直接对二进制进行位移操作实现数值运算,所以运算效率高
位运算符符号解释
&按位与,当两位相同时为 1 时 返回 1
\|按位或,只要有一位为 1 即可返回 1
^按位异或,当两位相同时返回 0,不同时返回 1
~按位非,将操作数的每个位(包括符号位)全部取反
<<左移运算符
>>右移运算符
>>>无符号右移运算符

二、如何区分 &,|,^ 是逻辑运算符还是位运算符?

如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符。

三、例子

按位与 &

运算规则:对应位都是 1 才为 1

正数运算

 9 & 7  // 结果 1

负数运算

 -9 & 7 // 结果 7

负数操作

按位或 |

运算规则:对应位只要有 1 即为 1

正数运算

 9 | 7  // 等于 15

整数或

负数运算

 -9 | 7 // 结果 -9

负数或

按位异或 ^

运算规则:当两位相同时返回 0,不同时返回 1

正数运算

 9 ^ 7  // 结果 14

按位异或
负数运算

 -9 ^ 7 // 结果 -16

按位异或2

按位取反 ~

运算规则: 将操作数的每个位(包括符号位)全部取反

正数运算

 ~9  // 结果 -10

按位取反1
负数运算

 ~-9  // 结果 8

按位取反2

左移 <<

运算规则:实际操作的是位,可以理解为左移几位就相当于乘以 2 的几次方

 3 << 4  // 类似于  3 * 2的4次 = 3*16 = 48

左移1

 -3 << 4 // 类似于  -3 * 2的4次 = -3*16 = -48

在这里插入图片描述

右移 >>

运算规则:实际操作的是位,可以理解为除以 2n 次幂,如果不能整除,向下取整

 69 >> 4 // 类似于 69 / 2的4次 = 69/16 = 4

右移1

 -69 >> 4 // 类似于  -69 / 2的4次 = -69/16 = -5

右移2

无符号右移 >>>

运算规则:实际操作的是位,不看符号位
正数:和右移一样
负数:右边移出去几位,左边补几个0,结果变为正数

 69 >>> 4  // 类似于  69 / 2的4次 = 69/16 = 4

无符号右移1

 -69 >>> 4   // 结果 268435451

无符号右移2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值