zoukankan      html  css  js  c++  java
  • 位运算符

     位运算符

    1、|  按位或 ( 逐位或 )
    2、&  按位与 ( 逐位与 )
    3、^ 按位异或 (逐位异或 )
    4、~ 按位取反 (逐位取反) 【注意连符号位也一起取反】

    public class BitOperator4 {
    
        public static void main(String[] args) {
            
            final int x = 5 ; // 0b00000000_00000000_00000000_00000101
            final int y = 7 ; // 0b00000000_00000000_00000000_00000111
    
            //【 5 】0b00000000_00000000_00000000_00000101
            //【 7 】0b00000000_00000000_00000000_00000111
            int a = x | y ; // 按位或: 0b00000000_00000000_00000000_00000111
            System.out.println( a );
    
            //【 5 】0b00000000_00000000_00000000_00000101
            //【 7 】0b00000000_00000000_00000000_00000111
            int b = x & y ; // 按位与: 0b00000000_00000000_00000000_00000101
            System.out.println( b );
    
            //【 5 】0b00000000_00000000_00000000_00000101
            //【 7 】0b00000000_00000000_00000000_00000111
            int c = x ^ y ; // 按位异或: 0b00000000_00000000_00000000_00000010
            System.out.println( c );
    
            System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
    
            int r = 5 ; // 0b00000000_00000000_00000000_00000101
            int s = 7 ; // 0b00000000_00000000_00000000_00000111
            System.out.println( "r = " + r + " , s = " + s );
    
            // int temp = s ; s = r ; r = temp ;
            r = r ^ s ; // 0b00000000_00000000_00000000_00000010
            s = r ^ s ; // 0b00000000_00000000_00000000_00000101
            r = r ^ s ; // 0b00000000_00000000_00000000_00000111
    
            System.out.println( "r = " + r + " , s = " + s );
    
            System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
    
            int j = 5 ; // 0b00000000_00000000_00000000_00000101
            // 注意使用 ~ 按位取反时,会对整数的符号位也取反
            int k = ~j ; //0b11111111_11111111_11111111_11111010
            //【补码】 11111111_11111111_11111111_11111010
            //【反码】 11111111_11111111_11111111_11111001
            //【原码】 10000000_00000000_00000000_00000110
            System.out.println( "j = " + j + " , k = " + k );
    
        }
    
    }

    位运算符 - 移位

    1、>> 向右移位,使用方法为 x >> n 表示 x 向右移动 n 位
         对于正数来说,向右移位时,高位补0,低位被挤掉
         对于负数来说,向右移位时,高位补1,低位被挤掉

    2、<< 向左移位,使用方法为 x << n 表示 x 向左移动 n 位
         不论是正数还是负数,向左移位时,都是挤掉高位,低位补0

    3、>>> 无符号右移
         不论是正数还是负数,向右移位时,高位一律补0,低位被挤掉

    4、Java 中没有 <<< 运算符 【划重点】

    public class BitOperator1 {
    
        public static void main(String[] args) {
            
            // 被 final 修饰的变量被称作【最终变量】,它是最终的、不可更改的变量 【不要当做"常量"对待】
            final int x = 5 ; // 0b00000000_00000000_00000000_00000101
            System.out.println( x );
            // 尝试再次为 final 修饰的变量赋值
            // x = 6 ; // 错误: 无法为最终变量x分配值
    
            // 将 最终变量 x 中存储的数值向右移动1位后赋值给 y 变量
            int y = x >> 1 ; // 0b0_00000000_00000000_00000000_0000010
            System.out.println( y );
    
            int z = x << 1 ; // 0b0000000_00000000_00000000_00000101_0
            System.out.println( z );
    
            System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
    
            // -5【原码】: 1000_0000_0000_0000_0000_0000_0000_0101
            // -5【反码】: 1111_1111_1111_1111_1111_1111_1111_1010
            // -5【补码】: 1111_1111_1111_1111_1111_1111_1111_1011
            final int m = -5 ; // 0b1111_1111_1111_1111_1111_1111_1111_1011
            System.out.println( m );
    
            int n = m >> 1 ; // // 0b1_1111_1111_1111_1111_1111_1111_1111_101
            //【补码】1_1111_1111_1111_1111_1111_1111_1111_101
            //【反码】1_1111_1111_1111_1111_1111_1111_1111_100
            //【原码】1_0000_0000_0000_0000_0000_0000_0000_011
            System.out.println( n );
    
            System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
    
            int p = m << 1 ; //  0b111_1111_1111_1111_1111_1111_1111_1011_0
            //【补码】111_1111_1111_1111_1111_1111_1111_1011_0
            //【反码】111_1111_1111_1111_1111_1111_1111_1010_1
            //【原码】100_0000_0000_0000_0000_0000_0000_0101_0
            System.out.println( p );
    
            System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
    
            int r = 0x7FFFFFFF ;
            System.out.println( r );
            int s = r << 1 ;
            System.out.println( s );
    
        }
    
    }
    public class BitOperator2 {
    
        public static void main(String[] args) {
            
            final int x = 5 ; // 0b00000000_00000000_00000000_00000101
            final int y = -5 ; // 0b1111_1111_1111_1111_1111_1111_1111_1011
    
            System.out.println( x >> 1 ); // 0b0_00000000_00000000_00000000_0000010
            System.out.println( y >> 1 ); // 0b1_1111_1111_1111_1111_1111_1111_1111_101
    
            System.out.println( "~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~" );
    
            System.out.println( x >>> 1 ); // 0b0_00000000_00000000_00000000_0000010
            System.out.println( y >>> 1 ); // 0b0_1111_1111_1111_1111_1111_1111_1111_101
    
        }
    
    }



  • 相关阅读:
    php composer 相关及版本约束等小技巧
    Jquery 获取表单值如input,select等方法
    Apache benchmark 压力测试工具
    Linux中的随机数文件 /dev/random /dev/urandom
    redis持久化
    Python---装饰器
    高仿拉手网底部菜单实现FragmentActivity+Fragment+RadioGroup
    python实现二叉树和它的七种遍历
    Spring AOP应用实例demo
    二维数组的列排序
  • 原文地址:https://www.cnblogs.com/helloyuankun/p/12850405.html
Copyright © 2011-2022 走看看