zoukankan      html  css  js  c++  java
  • java 与或非异或右移左移(&|~ ^ >> << >>>)

    public static void main(String[] args) {
            
            /**
             *   & 与运算
             *       1, 二进制都为1才为1;
             *       
             */
            /*System.out.println(5 & 3);  // 101 & 11 = 1 --> 1
            System.out.println(5 & 3);  // 11 & 101 = 1 --> 1
            System.out.println(-5 & 4); // 11111011 & 100 = 0 --> 0
            System.out.println(-10 & 5); // 11110110 & 101 = 100 --> 4
            */
            /**
             *  | 或运算
             *      1, 如果相对应位都为0,则结果为0,否则为1
             *       2, 只取8位进行计算, 不是32位
             */
            /*System.out.println(5 | 3); // 101 | 11 = 111 --> 7
            System.out.println(3 | 5); // 11 | 101 = 111 --> 7
            System.out.println(-5 | 3); // 11111011 | 11 = 11111111 --> -3
            System.out.println(5 | -3); // 101 | 11111101 = 11111101 --> -5
            */
            
            
            /**
             *  ~ 非运算, 按位取反
             *      1,重点
             *      2, 流程: 原码 --》 反码 --》 补码 --》补码 --》反码 --》 原码
             *      2,取八位计算,int(32位):
             *           比如 :5 的二进制 补码是: 00000101
             *          取反补码是:                               11111010
             *          补码转反码-1:                        11111001
             *          反码转原码(最高位为1,负数):10000110 
             *          结果: -6  
             *          
             *          如果是负数:-5
             *              -5的补码: 11111011
             *             -5取反补码:    00000100
             *          现在补码是正数:    即结果为:4                              
             */
            /*System.out.println("----非运算 ~ -----");
            System.out.println(~5);
            System.out.println(~-5);*/
            
            /**
             *  ^ 异或运算
             *      1, 相对应位相同,则结果为0,否则为1:
             *          例如:110 ^ 110 = 000 --> 0
             *      2, 负数运算:-6 ^ 5:(取八位计算)
             *          -6补码:11111010
             *          5补码:    00000101
             *       -6^5补码:    11111111
             *             结果反码:11111110
             *                                      原码:          10000001
             *              结果:-1
             */
            /*System.out.println("----异或运算 ^ -----");
            System.out.println(6^6); // 110 ^ 110 = 000 ---> 0
            System.out.println(6^5); // 110 ^ 101 = 011 --> 3
            System.out.println(-6^5); //
            */
            
            
            
            /**
             * >> 右移
             *         右端被移除,左端移入原来最高位,现在最高位是1
             *         例子:-5 >> 1:
             *             -5补码:11111011
             *             右移1位:11111101   :右端被移除,左端移入原来最高位,现在最高位是1
             *             反码:        11111100:减去1  
             *             原码:        10000011: 
             *             结果:       -3
             */
            /*System.out.println("----右移 >> -----");
            System.out.println((4>>2)); // 100 >> 2 = 1 --> 1
            System.out.println(8>>2);  // 1000 >> 2 = 10 --> 2
            System.out.println(4>>1);  // 100 >> 1 = 10 -->2
            System.out.println(8>>1);  // 1000 >> 1 = 100 -->4
            System.out.println(-5>>1); // 
            */
            
            /**
             *  << 左移
             *      最高位溢出,最低为补0
             *      
             */
            /*System.out.println(4<<2); // 100 << 2 = 10000 --> 16;
            System.out.println(10<<2); // 1010 << 2 = 101000 --> 40
            */
            
            /**
             *  >>> 无符号右移
             *      最低位移除,最高位补零,与 ‘>>’ 最高位移入最高位不同
             *      例子:-10>>>2
             *          -10补码: 11111111 11111111 11111111 11110110
             *          右移两位:   00111111 11111111 11111111 11111101
             *          结果:             1073741821
             */
            /*System.out.println(10>>>1); // 1010 >>> 1 = 0101 --> 5
            System.out.println(10>>>2); // 1010 >>> 2 = 0010 ---> 2
            System.out.println(2>>>3);  // 0010 >>> 3 = 0000 ----> 0
            System.out.println(-10>>>2); // 
            */
            
            /**
             *        例子:128 >> 1 returns 128/ 2 = 64
                    256 >> 4 returns 256/ 16 = 16
                    -256 >> 4 returns -256/ 16 = -16
                    16<<2      return  16 * 4 = 64
                    -16<<2     return  -16 * 4 = -64
             */
            System.out.println(-256>>4); //-16
            System.out.println(-32>>2);        //-8
            System.out.println(16<<2);   //16*2*2 = 64
            System.out.println(-16<<2);  //-16*2*2 = -64
            
            System.out.println(256>>>4);   //16
            System.out.println(-256>>>4);    //268435440
            
        }
  • 相关阅读:
    P1093 奖学金
    华容道
    回文数
    P1654 OSU!
    Noip P1063 能量项链
    Noip 寻宝
    NOIP 2009 普及组 第三题 细胞分裂
    拦截器
    OGNL
    Struts2 配置详解
  • 原文地址:https://www.cnblogs.com/maigao/p/13492848.html
Copyright © 2011-2022 走看看