不常用,所以給自己記一下,做二進制計算的時候很好用。
public class Demo {
public static void main(String[] args) {
/**
* << 左移運算符,num << 1,相當於num乘以2
*
*/
//左移: 10 << 1 = 1010 變成 20
System.out.println("左移: 10 << 1 = " + Integer.toBinaryString(10) + " 變成 " + (10 << 1));
//左移: 1 << 10 = 1 變成 1024
System.out.println("左移: 1 << 10 = " + Integer.toBinaryString(1) + " 變成 " + (1 << 10));
/**
* >> 右移運算符,num >> 1,相當於num除以2
*
*/
//右移: -4 >> 2 = 11111111111111111111111111111100 變成 -1
System.out.println("右移: -4 >> 2 = " + Integer.toBinaryString(-4) + " 變成 " + (-4 >> 2));
//右移: 8 >> 2 = 1000 變成 2
System.out.println("右移: 8 >> 2 = " + Integer.toBinaryString(8) + " 變成 " + (8 >> 2));
/**
* >>> 無符號右移,忽略符號位,空位都以0補齊
* 當爲正整數時是和右移結果一樣的,但是爲負數時,結果就會不一樣了
*/
//無符號右移: -4 >>> 2 = 11111111111111111111111111111100 變成 1073741823
System.out.println("無符號右移: -4 >>> 2 = " + Integer.toBinaryString(-4) + " 變成 " + (-4 >>> 2));
//無符號右移: 8 >>> 2 = 1000 變成 2
System.out.println("無符號右移: 8 >>> 2 = " + Integer.toBinaryString(8) + " 變成 " + (8 >>> 2));
System.out.println("————————————————————————");
System.out.println("————————————————————————");
//101
System.out.println(Integer.toBinaryString(5));
//011
System.out.println(Integer.toBinaryString(3));
//只有兩位都爲1,結果才爲1
//位與: 5 & 3 = 1 (1)
System.out.println("位與: 5 & 3 = " + (5 & 3) + " (" + Integer.toBinaryString(5 & 3) + ")");
//只要有一位是1,結果就是1
//位或: 5 | 3 = 7 (111)
System.out.println("位或: 5 | 3 = " + (5 | 3) + " (" + Integer.toBinaryString(5 | 3) + ")");
//只有兩位一個是1,一個是0,結果纔是1
//異或: 5 ^ 3 = 6 (110)
System.out.println("異或: 5 ^ 3 = " + (5 ^ 3) + " (" + Integer.toBinaryString(5 ^ 3) + ")");
//與全1做異或,然後取反
//異或非: ~5 = -6 (11111111111111111111111111111010)
System.out.println("異或非: ~5 = " + (~5) + " (" + Integer.toBinaryString(~5) + ")");
System.out.println("二進制轉十進制: " + Integer.valueOf("10101", 2));
System.out.println("十進制轉二進制: " + Integer.toBinaryString(21));
}