zoukankan      html  css  js  c++  java
  • Java基础-位运算

    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标识负数

    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,证明了上面的理论。更多java基础学习资料+ 我的学习裙:前108中062后1881 。

     
  • 相关阅读:
    pair和map
    lower_bound( )和upper_bound( )
    P1886 滑动窗口 /【模板】单调队列
    数的度(数位dp)
    最小生成树
    刷题-力扣-1052. 爱生气的书店老板
    刷题-力扣-766. 托普利茨矩阵
    刷题-力扣-28. 实现 strStr()
    刷题-力扣-697. 数组的度
    刷题-力扣-1004. 最大连续1的个数 III
  • 原文地址:https://www.cnblogs.com/xmh660/p/13292453.html
Copyright © 2011-2022 走看看