1. 程式人生 > >位運算 java 筆記

位運算 java 筆記

package ice.snowflake.test;

import java.util.logging.Logger;

//https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Expressions_and_Operators
public class BitwiseOperatorTest {
    static Logger log = Logger.getLogger(BitwiseOperatorTest.class.getName());

    public static void main(String[] args) {
        Integer a = 15;
        Integer b = 9;
        Integer c = -10;
        Integer d = Integer.MAX_VALUE;
        Integer e = Integer.MIN_VALUE;

        p("非邏輯運算");
        p(Integer.toBinaryString(a) + "  正整數a的2進位制值");                                                   //1111
        p(Integer.toBinaryString(~a) + "  正整數a進行非運算後的2進位制值,首位符號位變成了1,變成了負整數");    //11111111111111111111111111110000
        p(Integer.toBinaryString(c) + "  負整數c的2進位制值,以補碼的方式表示");                                    //11111111111111111111111111110110
        p(Integer.toBinaryString(~c) + "  負整數c進行非運算後的2進位制值,首位符號位變成了0,變成了正整數");       //1001
        p("兩個正數邏輯操作——————————————————————————");
        p(Integer.toBinaryString(a) + "  正整數a的2進位制值");         //1111
        p(Integer.toBinaryString(b) + "  正整數b的2進位制值");        //1001
        p(Integer.toBinaryString(a & b) + " &   兩個整數與");      //1001 與,兩者都為則返回1
        p(Integer.toBinaryString(a | b) + " |   兩個整數或");      //1111  或,有一個為1,則返回1
        p(Integer.toBinaryString(a ^ b) + " ^   兩個整數異或");    //110  異或,兩者不一樣則返回1
        p("兩個不同符號數邏輯操作——————————————————————————");
        p(Integer.toBinaryString(a) + " 正整數a的2進位制值");               //1111 正整數a的2進位制值
        p("0000000000000000000000000000" + Integer.toBinaryString(a)
                + " 正整數a的2進位制值,左側補滿0,好比較");                     //00000000000000000000000000001111 正整數a的2進位制值,左側補滿0,好比較
        p(Integer.toBinaryString(c) + " 負整數c的2進位制值");              //11111111111111111111111111110110 負整數c的2進位制值
        p(Integer.toBinaryString(a & c) + " &   與");                 //110 &   與
        p(Integer.toBinaryString(a | c) + " |   或");                 //11111111111111111111111111111111 |   或
        p(Integer.toBinaryString(a ^ c) + " ^   異或");               //11111111111111111111111111111001 ^   異或

        p("移位運算");
        p("正整數——————————————————————————");
        p(Integer.toBinaryString(d) + " 正整數d");                             //1111111111111111111111111111111 正整數d
        p("0"+Integer.toBinaryString(d) + " 正整數d,補充左側符號位");        //01111111111111111111111111111111 正整數d,補充左側符號位
        p(Integer.toBinaryString(d >> 2) + " 正整數右移兩位");             //11111111111111111111111111111 正整數右移兩位
        p(Integer.toBinaryString(d >>> 2) + " 正整數無符號右移兩位");      //11111111111111111111111111111 正整數無符號右移兩位
        p(Integer.toBinaryString(d << 2) + " 正整數左移兩位");             //11111111111111111111111111111100 正整數左移兩位

        p("負整數——————————————————————————");
        p(Integer.toBinaryString(e) + " 負整數e");                         //10000000000000000000000000000000 負整數e
        p(Integer.toBinaryString(e >> 2) + " 負整數右移兩位");         //11100000000000000000000000000000 負整數右移兩位
        p(Integer.toBinaryString(e >>> 2) + " 負整數無符號右移兩位"); //100000000000000000000000000000 負整數無符號右移兩位
        p(Integer.toBinaryString(e << 2) + " 負整數左移兩位");         //0 負整數左移兩位
    }

    public static void p(Object msg) {
        System.out.println(msg);
    }
/*    public static void p(String msg){
        log.info(msg);
    }*/
}