专栏首页步履前行java 的位运算符

java 的位运算符

今天在看HashMap 源码的时候 看到了位移运算符,正好再复习一下

左移运算符

/**
     * The default initial capacity - MUST be a power of two.
     */
    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

在 Main 方法中 计算1 << 4 得出的结果是 16

继续计算 2 << 4 得出的结果是32.

首先看 1 << 4 这个操作,读法是 1 向左移动 4 位,用 二进制表示就是

0000 0001 十进制表示是 1

0001 0000 十进制表示是16

  • 左移运算符就是在给定数值的基础上向左移动 N 位,注意如果是高位进行改变了,那么我们要注意负数的变化。
  • 如果int 类型左移位数 大于等于 32 位的时候,要先求余(%)后再进行左移操作,也就是说 假如我们左移 32 位,该int 类型的 二进制 全部变成了0 ,当然最后的结果肯定不为0 了,比如 System.out.println(1 << 36); 最后的得出结果还是16,而且在 IDEA 中还提示

// Shift operation '<<' by overly large constant value

也就是说左移 32 位不进行操作,左移40位相当于左移8位(40%32=8)。如果是 long 类型,则相应的操作位数会变大,变成64 位,所以 long 类型 左移 64 位无变化,左移 66 位相当于 (66%64 = 2)位


右移 运算符

右移运算符分为 2 种, >> (右移运算符) 和 >>> (无符号右移运算符)

>> (右移运算符)

右移运算符就是向右移动指定的位数,左边补上0,比如

10 >> 2

0000 1010 右移 >>

0000 0010

结果就是 2 了,和左移一样,int 类型右移 32 位不做处理,long 类型右移 64 位也不做处理

>>> (无符号右移)

无符号右移从名字我们可以看出,右移的时候 高位也就是符号位不做处理,右移的时候会处理,说白了就是 普通右移 正数 >> 正数,负数 >> 负数, 而无符号右移就是正数 >>> 正数,负数 >>> 正数,即无符号右移会左边补0 处理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mybatis plus性能分析插件引起的 Full table operation is prohibited.

    今天在执行一个 update 语句的时候,发现一直报Full table operation is prohibited.

    haoming1100
  • 关系型数据库与非关系型数据库

      当前我们各种高并发的时代下,NoSql正以大规模侵袭的状态下入侵SQL界,我们现在很普及的关系数据库如mysql、oracle、DB2、Microsoft的...

    haoming1100
  • 【Java】基础篇-HashMap

    public V put(K key, V value) { // 对key的hashCode()做hash return putVal(ha...

    haoming1100
  • 数据库分库分表策略

    业务分库指的是按照业务模块将数据分散到不同的数据库服务器。例如,一个简单的电商网站,包括用户、商品、订单三个业务模块,我们可以将用户数据、商品数据、订单数据分开...

    乐心湖
  • 前台JS(Jquery)调用后台方法 无刷新级联菜单示例

    前台用AJAX直接调用后台方法,老有人发帖提问,没事做个示例 CasMenu.aspx页面: <%@ Page Language="C#" AutoEventW...

    Porschev
  • Tapestry 教程(六)使用BeanEditForm来创建用户表单

    在前面一章,我们看到了Tapestry如何处理简单地链接,甚至于处理能在URL中传递信息的链接。在本章,我们将会看到Tapestry如何以不同的方式做同样的事情...

    LeoXu
  • mysql基础

    TPL 事务处理语言 确保被DML语句影响的表和行得以及时更新,包括开始事务,提交事务,回滚

    HaC
  • 分布使用synchronized关键字和AtomicInteger进行线程同步的例子

    Jerry Wang
  • 生命之圈:生物数据可视化的美丽新方法

    大数据文摘
  • iOS端TXLiteAVSDK与其它三方库冲突报错问题

    iOS 端在集成腾讯云视频服务客户端音视频SDK时,与开发者自己工程中的第三方库冲突,导致编译报错。

    腾讯视频云-Zachary

扫码关注云+社区

领取腾讯云代金券