• Java中的位运算符


    字面量的八进制和十六进制

    以0开头的整数为八进制

    • 05就是5 5*8^0=5
    • 011就是9 1*8+1*8^0=8+1=9

    以0x开头的整数为十六进制

    • 0xF就是15
    • 0x11就是17 1*16+1*16^0=16+1=17
    public class LiteralNumber {
        public static void main(String[] args) {
            int a = 05;
            int b = 011;
            int c = 0xF;
            // 16进制的数值写成:0x或者0X都行
            int d = 0X11;
    
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
            System.out.println(d);
        }
    }

    按位运算符

    • 按位并 &(and)
    • 按位或 |(or)
    • 按位异或 ^(xor)
    • 按位取反 ~(~)
    public class BitCalc {
        public static void main(String[] args) {
            // 二进制的 1111 1000
            int a = 0xF8;
            // 二进制的 1111 0100
            int b = 0xF4;
            // 二进制的 1111 1111
            int c = 0xFF;
    
            System.out.println(a&b);
            System.out.println(a|b);
            System.out.println(a^b);
    
            System.out.println(~c);
        }
    }

    位移运算符

    • >> :符号不动,其余右移,符号位后面正数补0,负数补1,又称带符号右移(效果是每移动一位,数值上会减少为原值绝对值的一半。但是符号是不变的。)
    • >>> :符号位一起右移,左边补0,又称无符号位右移(如果原值为负数,那么右移会使数值变得非常大;如果原值为正数,那么效果同上面的>>运算符一样。)
    • << :左移,右边补0,左移没有符号位一说,因为符号位在最左侧。(效果是每移动一位,数值上会增加为原值绝对值的一倍。但是符号是不变的。)
    • 位运算符不会改变原变量的值。
    public class BitShift {
        public static void main(String[] args){
            int a = 0x400; // 二进制为1024
            System.out.println(a);
            System.out.println(a >> 1); // 右移一位减少一半
            System.out.println(a >> 2);
    
            System.out.println(a << 1); // 左移一位增加一倍
            System.out.println(a << 2);
    
            int b = -0x400;
            System.out.println(b);
            System.out.println(b >> 1); // 带符号右移一位绝对值同样减少一半,然后带上符号(-)
            System.out.println(b >> 2);
    
            System.out.println(b << 1); // 带符号左移一位,绝对值增加一倍,然后带上符号(-)
            System.out.println(b << 2);
    
            System.out.println(b >>> 1);
            System.out.println(b >>> 2);
        }
    }

    位运算符的用处

    按位运算符:掩码(mask)

    位移运算符:右移高效除以2(正数)

    public class BitOprtUsage {
        public static void main(String[] args) {
            // 掩码操作
            int base = 1;
            // 0001
            int is_student_mask = base;
            // 0010
            int is_programer_mask = base << 1;
            // 0100
            int is_driver_mask = base << 2;
            // 1000
            int is_painter_mask = base << 3;
    
            // 二进制是0101
            int data = 5;
    
            // 0101 & 0001 = 1
            boolean isStudent = (data & is_student_mask) != 0;
            System.out.println(isStudent);
    
            // 0101 & 0010 = 0
            boolean isProgramer = (data & is_programer_mask) != 0;
            System.out.println(isProgramer);
    
            // 0101 & 0100 = 0100
            boolean isDriver = (data & is_driver_mask) != 0;
            System.out.println(isDriver);
    
            // 0101 & 1000 = 0
            boolean isPainter = (data & is_painter_mask) != 0;
            System.out.println(isPainter);
        }
    }
  • 相关阅读:
    【机器学习笔记】EM算法及其应用
    【机器学习笔记】循环神经网络RNN
    【caffe范例详解】
    Caffe on Windows (Visual Studio 2015+CUDA8.0+cuDNNv5)
    【Keras案例学习】 CNN做手写字符分类(mnist_cnn )
    Celery分布式文件队列
    通过nginx+lua或openresty实现web站点的waf功能
    使用docker hub获取kubernetes各个组件的镜像
    使用Ansible快速构建kubernetes1.10.4HA高可用集群
    创建私服maven服务
  • 原文地址:https://www.cnblogs.com/buildnewhomeland/p/12110043.html
Copyright © 2020-2023  润新知