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

Java基础-位运算

作者头像
suveng
发布2020-02-25 15:17:25
6030
发布2020-02-25 15:17:25
举报

1-1 Java基础-位运算

什么是位运算?

一个字节=8位二进制1k=1024字节1k=1024*8位二进制

位运算其实就是移位运算,将内存里面的二进制进行移位比如二进制=101向右移1位 010|1移位之后的1其实已经不被计算在内了, 变成内存里面的垃圾在java中,一个int数值类型有32位二进制1位是符号位,从2的0次方开始算起,数值的范围为 $[-2^{32},2^{31}-1]$

Java的位运算

带符号位的位运算

<<左移就是向左移一位,比如101左移1位1011010 向后补0>>右移就是向右移一位1010101记住这是带符号位的移位

无符号位运算

>>><<< 则是不带符号位的位运算,比如1013(10进制的3)=101(二进制的101)在java中,分配了32位的内存给int,所以在java中的内存应该是这样的:符号位0标识正数,1标识负数

代码语言:javascript
复制
0 0000 0000 0000 0000 0000 0000 0000 101 
无符号左移1位
0 0000 0000 0000 0000 0000 0000 0000 010|1

再拿个负数来举例子$-3$

代码语言:javascript
复制
1 0000 0000 0000 0000 0000 0000 0000 101
无符号左移1位
0 1000 0000 0000 0000 0000 0000 0000 010|1

最后负数$-3$变成了 $2^{30} + 2^{1}=2147483646$便于观察我们可以将-3无符号左移31位

代码语言:javascript
复制
1 0000 0000 0000 0000 0000 0000 0000 101
无符号左移31位
0 0000 0000 0000 0000 0000 0000 0000 001 | 0000 0000 0000 0000 0000 0000 0000 101

就变成了1(10进制)

下面用简单的java程序来证明一下:

代码语言:javascript
复制
public class Random {
    public static void main(String[] args) {
        int j = -3;
        int i = j >>> 31;
        System.out.println(i);
    }
}

运行上面的程序可以观察到输出1,证明了上面的理论

联系我: suveng@163.com qq: 1344115844

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1-1 Java基础-位运算
    • 什么是位运算?
      • Java的位运算
        • 带符号位的位运算
        • 无符号位运算
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档