【Java基础---位运算符】

package my.study.util.collection;

/**
 *-----------------------------------------------------------------
 *------------------------位移运算符---------------------------------
 *-----------------------------------------------------------------
 * 直接操作二进制的运算符
 *
 *      &   “与”  : 上下对应位都是1 , 结果才为1.
 *
 *      |   “或”  : 上下对应位都是0, 结果才为0.
 *
 *      ^    "异或" :上下对应为相同, 结果才为0.
 *
 *      ~   ”非“    : 1变0, 0变1.
 *
 *      >>  ”右移运算符“  :
 *
 *      <<  ”左移运算符“  :
 *
 *      >>>  ”按位右移补零操作符。“
 */
public class Operation {


    public static void main(String[] args) {
        /**
         *    0000 0110    6
         *
         *    0000 1110    14
         */
        int  A = 6, B = 14;

        int c = A & B;
        /**
         *    0000 0110
         *  & 0000 1110
         *  ----------------
         *    0000 0110     6
         */
        System.out.println("A&B:"+ c);  //结果  6


        int d = A | B ;
        /**
         *    0000 0110
         *  ^ 0000 1110
         *  ----------------
         *    0000 1110     14
         */
        System.out.println("A | B:"+ d);   //结果  14

        int e = A ^ B ;
        /**
         *    0000 0110
         *  ^ 0000 1110
         *  ----------------
         *    0000 1000     8
         */
        System.out.println("A ^ B:"+ e);   //结果  8


        /**
         *   0000 0110
         *        000110
         */
        int a = A >> 2;

        System.out.println("A>>2:"+a);  //结果 1

        a = A>>>2;
        System.out.println("A>>>2:"+ a); //结果 1

        /**
         *    0000 0110    A
         *
         *    0001 1000    A<<2
         */
        a = A << 2;
        System.out.println("A << 2:"+a);  // 24


        /**
         *    ”>>>“  和 ">>" 的区别
         */
        int b = -1;
        System.out.println(b>>2);    //结果 -1
        System.out.println(b>>>2);   //结果 1073741823

        /**
         * 分析:
         *   int 的完整二进制表达式:
         *
         *      0000 0000 0000 0000 0000 0000 0000 0000    一个int 4个byte, 一个byte是8个bit位。
         *
         *   正反数转换原则: 正数取反加1, 为负数。
         *
         *      0000 0000 0000 0000 0000 0000 0000 0001    ----- 1
         *
         *      1111 1111 1111 1111 1111 1111 1111 1110    -------取反
         *                                          + 1
         *      ------------------------------------------------------
         *      1111 1111 1111 1111 1111 1111 1111 1111    -------  -1,  这就是 ”-1“ 的二进制表达式
         *
         *
         *   b >> 2 :  按位右移2位,移动得到的空位 不做处理。
         *
         *       1111 1111 1111 1111 1111 1111 1111 1111    -----  -1
         *
         *         1111 1111 1111 1111 1111 1111 1111 1111  -----   右移2位
         *      --------------------------------------------------------------
         *         11 1111 1111 1111 1111 1111 1111 1111     ------结果还是-1,只不过最前面两位移走了,没有补位。
         *
         *
         *   b >>> 2:  按位右移2位,移动得到的空位以零填充。
         *
         *      1111 1111 1111 1111 1111 1111 1111 1111    -----  -1
         *
         *      001111 1111 1111 1111 1111 1111 1111 1111  -----   右移2位,空位补0.
         *
         *     -----------------------------------------------------------------------
         *      0011 1111 1111 1111 1111 1111 1111 1111     -----结果就变成一个正数了。
         *
         *
         *
         *
         *
         *
         */

    }



}
“>>>” 和 “>>” 的区别只在于移动操作后,出现的空位, “>>>”以0 填充,而  ">>" 不做处理。 

猜你喜欢

转载自blog.csdn.net/qq_41694349/article/details/79270220
今日推荐