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





  • 相关阅读:
    PAT 1010. 一元多项式求导 (25)
    PAT 1009. 说反话 (20) JAVA
    PAT 1009. 说反话 (20)
    PAT 1007. 素数对猜想 (20)
    POJ 2752 Seek the Name, Seek the Fame KMP
    POJ 2406 Power Strings KMP
    ZOJ3811 Untrusted Patrol
    Codeforces Round #265 (Div. 2) 题解
    Topcoder SRM632 DIV2 解题报告
    Topcoder SRM631 DIV2 解题报告
  • 原文地址:https://www.cnblogs.com/cn-jag/p/6098915.html
Copyright © 2011-2022 走看看