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

    public class Test {
        public static void main(String[] args) {
            // 1、左移( << )
            // 0000 0000 0000 0000 0000 0000 0000 0101 然后左移2位后,低位补0://
            // 0000 0000 0000 0000 0000 0000 0001 0100 换算成10进制为20
            System.out.println(5 << 2);// 运行结果是20
    
            // 2、右移( >> ) 高位补符号位
            // 0000 0000 0000 0000 0000 0000 0000 0101 然后右移2位,高位补0:
            // 0000 0000 0000 0000 0000 0000 0000 0001
            System.out.println(5 >> 2);// 运行结果是1
            // 3、无符号右移( >>> ) 高位补0
            // 例如 -5换算成二进制后为:0101 取反加1为1011
            // 1111 1111 1111 1111 1111 1111 1111 1011
            // 我们分别对5进行右移3位、 -5进行右移3位和无符号右移3位:
            System.out.println(5 >> 3);// 结果是0
            System.out.println(-5 >> 3);// 结果是-1
            System.out.println(-5 >>> 3);// 结果是536870911
    
            // 4、位与( & )
            // 位与:第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0
            System.out.println(5 & 3);// 结果为1
            System.out.println(4 & 1);// 结果为0
    
            // 5、位或( | )
            // 第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0
            System.out.println(5 | 3);// 结果为7
    
            // 6、位异或( ^ )
            // 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0
            System.out.println(5 ^ 3);//结果为6
    
            // 7、位非( ~ )
            // 操作数的第n位为1,那么结果的第n位为0,反之。
            System.out.println(~5);// 结果为-6
        }
    }
    Code copy


     1 public class SuanFaTest {
     2 
     3     //此方法的时间复杂度是O(LogN)
     4     public static boolean ispowerOf2_(Integer number) {
     5         int temp = 1;
     6         while (temp <= number) {
     7             if (temp == number) {
     8                 return true;
     9             }
    10             //左移一位  数学意义等同于乘以2
    11             temp = temp * 2;
    12         }
    13         return false;
    14     }
    15 
    16     //此方法的时间复杂度是O(LogN)
    17     public static boolean ispowerOf2_initiate(Integer number) {
    18         int temp = 1;
    19         while (temp <= number) {
    20             if (temp == number) {
    21                 return true;
    22             }
    23             //左移一位  数学意义等同于乘以2
    24             temp = temp << 1;
    25         }
    26         return false;
    27     }
    28 
    29     //算法时间复杂度是O(1)
    30     public static boolean isPowerOf2_final(Integer number) {
    31         return (number & number - 1) == 0;
    32     }
    33 
    34     public static void main(String[] s){
    35         System.out.println(ispowerOf2_(7));
    36         System.out.println(ispowerOf2_initiate(7));
    37         System.out.println(isPowerOf2_final(7));
    38     }
    39 }
                    带符号右移就是将那个数转为2进制然后在前面补0或1
    如果是正数就补0
    负数补1
             右移一位相当于除2,右移n位相当于除以2的n次方。


    加密

    1 一个数异或同一个数两次还是原数;

    
    
    /**
     * Created by YaoJia on 2016/11/24 0024.
     */
    public class YiHuo {
    
    
        public static void main (String[] aa){
            System.out.println();
    
            int a=1;
            int b=2;
    
            System.out.println("a:"+a +" "+ "b:"+b);
            a = a ^ b;
            System.out.println("a = a ^ b之后-->"+"a:"+a +" "+ "b:"+b);
            b = a ^ b;  //实际上是(a^b)^b 也就是a异或了b两次,等号右边是a的值
            System.out.println("b = a ^ b之后-->"+"a:"+a +" "+ "b:"+b);
            a = a ^ b;  //此时b里面已经是“果汁”,实际上是(a^b)^a,也就是b异或了a两次,是b
            System.out.println("a = a ^ b之后-->"+"a:"+a +" "+ "b:"+b);
    
        }
    
    
    
    }
    View Code





  • 相关阅读:
    express学习
    安装MongoDB步骤
    js事件流
    关于html,css,js三者的加载顺序问题
    重写JS的鼠标右键点击菜单
    深入JS原型与原型链
    eureka学习(二)
    eureka学习(一)
    mysql学习-explain中的extra
    mysql学习-explain
  • 原文地址:https://www.cnblogs.com/cn-jag/p/6098915.html
Copyright © 2011-2022 走看看