美文网首页
Java基础-位运算

Java基础-位运算

作者: suveng | 来源:发表于2020-02-19 19:53 被阅读0次

    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位
    101
    1010 向后补0
    >>右移就是向右移一位
    101
    0101
    记住这是带符号位的移位

    无符号位运算

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

    0 0000 0000 0000 0000 0000 0000 0000 101 
    无符号左移1位
    0 0000 0000 0000 0000 0000 0000 0000 010|1
    

    再拿个负数来举例子-3

    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位

    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程序来证明一下:

    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

    相关文章

      网友评论

          本文标题:Java基础-位运算

          本文链接:https://www.haomeiwen.com/subject/wrlzfhtx.html