位運算 java 筆記
阿新 • • 發佈:2019-02-13
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); }*/ }