假設 j = i 那 j >> i = 0
j = i j >> i = 0
右移位數相當於除2的位數方,二進位制32個一組:(正數的無符號右移適用此公式,負數不適用)
j >> i = j >>> i = j / (int) (Math.pow(2, i % 32));
左移位數相當於乘2的位數方,二進位制32個一組:
j << i = j * (int) (Math.pow(2, i % 32));
異或符號運算,從二進位制演算法後轉為十進位制,公式:
^ 符號為異或 0 ^ 0 = 0, 1 ^ 0 = 1, 0 ^ 1 = 1, 1 ^ 1 = 0
舉例:
9 二進位制:1 0 0 1
2 二進位制:0 0 1 0
9 ^ 2 結果:1 0 1 1
轉換為十進位制:8 + 2 + 1 = 11
規律:跳過為0的數,只關注為1的數 每位的十進位制 = Math.pow(2, 位數(從左到右數) - 1);
假設 j = i 那 j >> i = 0
j = i j >> i = 0
右移位數相當於除2的位數方,二進位制32個一組:(正數的無符號右移適用此公式,負數不適用)
j >> i = j >>> i = j / (int) (Math.pow(2, i % 32));
左移位數相當於乘2的位數方,二進位制32個一組:
j << i = j * (int) (Math.pow(2, i % 32));
異或符號運算,從二進位制演算法後轉為十進位制,公式:
^ 符號為異或 0 ^ 0 = 0, 1 ^ 0 = 1, 0 ^ 1 = 1, 1 ^ 1 = 0
舉例:
9 二進位制:1 0 0 1
2 二進位制:0 0 1 0
9 ^ 2 結果:1 0 1 1
轉換為十進位制:8 + 2 + 1 = 11
規律:跳過為0的數,只關注為1的數 每位的十進位制 = Math.pow(2, 位數(從左到右數) - 1);