• java基础-位运算符


    1.位运算符

    << 左移 :            右边以0填充

    >> 带符号右移:    负数前面补1,整数补0

    >>>不带符号右移 

    & 按位与运算

    | 按位或运算

    ^按位异或

    ~按位取反

    ^按位异或

    /*
        演示位运算
        << : 左移,右边以0填充
    */
    public class BitDemo{
        public static void main(String[] args){
            int i = 3;
            System.out.println(i << 2);
            
            System.out.println(-128 >> 1);
            System.out.println(-128 >> 2);
            
            System.out.println("-----------------");
            System.out.println(-128 >>> 1);//
            System.out.println(-128 >>> 2);//
            
            
        }
    }
    /*
        有符号,无符号右移
        
        & : 按位与
        | : 按位或
        ^ : 按位异或
    */
    public class BitDemo2{
        public static void main(String[] args){
            // int i = -128;
            // System.out.println(i >> 2);
            // System.out.println(i >>> 2);
            
            int min = Integer.MIN_VALUE;
            // System.out.println(min << 11);
            
            
            // System.out.println(6 & 12);//4
            // System.out.println(128 & -1);
            // System.out.println(0 & -1);
            // System.out.println(-1 & 0);
            
            
            // System.out.println(6 | 3);
            // System.out.println(-128 | -1);
            // System.out.println(-1 | 0);
            // System.out.println(-1 | -1);
            
            // System.out.println(6 ^ 3);//5
            
            // System.out.println(min ^ -1);
            // System.out.println(~min);
            // System.out.println(~1);//-2
            
        }
    }
    /*
        异或运算的简单应用
            1.不使用第三方变量交换两个变量的值
                异或运算规律:
                    两个数异或的结果和其中的一个数再次异或,得到另一个数.
                
            2.简单加密    
                
    */
    public class BitDemo3{
        public static void main(String[] args){
            //使用第三方变量交换两个变量的值
            // int a = 10;
            // int b = 20;
            // System.out.println("交换前 :a = " + a + ",b = " + b);
            // //定义临时变量
            // int temp = a;
            // a = b;
            // b = temp;
            // System.out.println("交换后 :a = " + a + ",b = " + b);
            
            //两个数异或的结果和其中任意一个数再次异或,得到另外一个数
            // int a = 20;
            // int b = 10;
            // System.out.println(a ^ b ^ a);// 相当于 b^a^a 将得到 b
            
            
            //使用异或交换两个变量值
            // int a = 10;
            // int b = 20;
            // System.out.println("交换前 :a = " + a + ",b = " + b);
            // a = a ^ b;//
            // b = a ^ b;//得到的是原来的a
            // a = a ^ b;//用两个数异或的结果,和原来的a进行异或,得到原来的b
            // System.out.println("交换后 :a = " + a + ",b = " + b);
            
            //使用和的方式交换两个变量
            // int a = 10;
            // int b = 20;
            // System.out.println("交换前 :a = " + a + ",b = " + b);
            // a = a + b;
            // b = a - b;
            // a = a - b;
            // System.out.println("交换后 :a = " + a + ",b = " + b);
            
            //一条语句交换两个变量的值
            // int a = 10;
            // int b = 20;
            // System.out.println("交换前 :a = " + a + ",b = " + b);
            // b = (a + b) - (a = b);
            // System.out.println("交换后 :a = " + a + ",b = " + b);
            
            //简单加密
            int m = 2000;
            int key = 23;
            m = m ^ key;
            System.out.println(m);
            System.out.println(m ^ key);
        }
    }
    /*
    	位运算规律
    		在不发生有效位丢失,和符号位改变的情况下,左移相当于乘以2的n次幂
    		右移相当于除以2的n次幂
    	
    	移动的位数超过32.实际移动的位数是和32的余数
    	
    */
    public class BitDemo4{
    	public static void main(String[] args){
    		int i = 128;
    		// System.out.println(i << 23);//
    		// System.out.println(i << 24);//
    		// System.out.println(i << 25);//
    		
    		// System.out.println(i << 32); //32 % 32 == 0 相当于没有移动
    		// System.out.println(i << 63); //63 % 32 = 31 
    		// System.out.println(i << 56); //56 % 32 == 24 
    		// System.out.println(2 >> 33); //33 % 32 == 1,相当于往右移动一位
    		// System.out.println(3 >> 32); //相当于没有移动
    		
    	
    		
    	}
    }
    

      

  • 相关阅读:
    乌龟棋
    Cut the Sequence
    [NOI2001]炮兵阵地
    Fence
    环路运输
    查找并替换字符串 Find And Replace in String
    最大交换 Maximum Swap
    丑数问题 Ugly Number
    二叉树最大宽度 Maximum Width of Binary Tree
    距离为K的节点 All Nodes Distance K in Binary Tree
  • 原文地址:https://www.cnblogs.com/leo9257/p/8733208.html
Copyright © 2020-2023  润新知