前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java 的位运算符

java 的位运算符

作者头像
haoming1100
发布2019-03-08 10:43:51
1.2K0
发布2019-03-08 10:43:51
举报
文章被收录于专栏:步履前行步履前行

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

左移运算符

代码语言:javascript
复制
/**
     * 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 处理

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-02-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 左移运算符
  • 右移 运算符
    • >> (右移运算符)
      • >>> (无符号右移)
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档