/** 例如:int i = 1; i占用 4 字節,1字節 = 8bit, 32位,bit(正整數 = 00000000 00000000 00000000 00000001 負數=11111111 11111111 11111111 11111111) 數字(num) bit 1 ====== 1 2 ====== 10 3 ====== 11 4 ====== 100 5 ====== 101 6 ====== 110 7 ====== 111 8 ====== 1000 9 ====== 1001 10 ====== 1010 11 ====== 1011 12 ====== 1100 13 ====== 1101 14 ====== 1110 15 ====== 1111 16 ====== 10000 ... ====== ... 2147483632 ====== 1111111111111111111111111110000 2147483633 ====== 1111111111111111111111111110001 2147483634 ====== 1111111111111111111111111110010 2147483635 ====== 1111111111111111111111111110011 2147483636 ====== 1111111111111111111111111110100 2147483637 ====== 1111111111111111111111111110101 2147483638 ====== 1111111111111111111111111110110 2147483639 ====== 1111111111111111111111111110111 2147483640 ====== 1111111111111111111111111111000 2147483641 ====== 1111111111111111111111111111001 2147483642 ====== 1111111111111111111111111111010 2147483643 ====== 1111111111111111111111111111011 2147483644 ====== 1111111111111111111111111111100 2147483645 ====== 1111111111111111111111111111101 2147483646 ====== 1111111111111111111111111111110 2147483647 ====== 1111111111111111111111111111111 */ /** * 正整數位移規律 * 1:int 正數 max(2147483647=(1 << 31) -1) bit = 1111111111111111111111111111111(31位),如果為32位,bit=10000000000000000000000000000000(32位,是負數), * min(1) bit=00000000000000000000000000000001(31位),高位的0被省略了,所以才31位。 * 2: 參考數字(1,2,3,4,5,6):bit 正數最高位為0(正數), 負數最高位為1(負數) * 3: 參考數字(1,2,3,4,5,6):bit 奇數 bit 低位=1, 偶數 bit 低位=0,加法算法規律,bit低位逢1高位補1,低位變0,逢0變1 * 4: 參考數字(2,4,8,16):1 << n, bit = 1 + n個0, 1 >> bit = 1- n個0 * 5: 參考數字(1,3,7,15):(1 << n)-1, num * 2 + 1的數字bit位都是1。 * * 6: 或(|): 0 | 0 =0, * 1 | 0 = 1, * 1 | 1 = 1。如果相同位有一個位為1,則為1,否則為0。 * int num = (1 << n)-1, n < num, 那么num | n = num。 當(1 << n)-1與任何與它小的數字進行異或操作,結果為(1 << n)-1。 * int num = (1 << n)-1, n > num, n必須再(2 << n)-1范圍。那么num | n = (2 << n)-1 。 當(1 << n)-1與任何與它小的數字進行異或操作,結果為(2 << n)-1。 * 注意:只有(1 << n)-1滿足這個規律。 * 7: 與(&): 0 & 0 = 0, * 1 & 0 = 0, * 1 & 1 = 1, 如果相同位都為1,則為1,否則為0。 * int num = (1 << n)-1, n < num, 那么num & n = n。 當(1 << n)-1與任何與它小的數字進行異或操作,結果為n。 * int num = (1 << n)-1, n > num, 那么num & n = (0-num)范圍 。 * 注意:只有(1 << n)-1滿足這個規律。 * 8: 異或(^): 1 ^ 0 = 1, * 0 ^ 0 = 0, * 1 ^ 1 = 0, 兩個位必須不相同 * 9: 取反(~): ~7 = -8, * ~5 = -6, * ~6 = -7,所有的正數變負數,因為高位為0,取反為1,變負數。 */