And there's one thing that I need from you
我只需要你為我做一-件事
Can you come through, through
待在我的身邊就好
Through, yeah
你可以撫慰一切不滿
And there's one thing that I need from you
你可以過來
Can you come through?
待在我的身邊嗎
-comethru·Jeremy Zucker


進制的分類
二進制:0,1 ? 滿2進1
八進制:0~7 滿8進1,以0開頭
十進制:0~9 滿10進1
十六進制:0~9及A~F 滿16進1,以0x或0X開頭表示,A~F不區分大小寫
進制的轉換
--- 第一組(其他進制轉十進制)------------
規則:從低位開始,將每個位上的數提取出來,乘以2/8/16的(位數-1)次方,然后求和
1)二進制轉十進制
規則:從低位開始,將每個位上的數提取出來,乘以2的(位數-1)次方,然后求和
1011 = 1 * 1 + 1 * 2 + 0 * 2 * 2 + 1 * 2 * 2 * 2 = 1 + 2 + 0 + 8 = 11
2)八進制轉十進制
規則:從低位開始,將每個位上的數提取出來,乘以8的(位數-1)次方,然后求和
123 = 3 * 1 + 2 * 8 + 1 * 8 * 8 = 3 + 16 + 64 = 83
3)十進制轉十六進制
規則:從低位開始,將每個位上的數提取出來,乘以16的(位數-1)次方,然后求和
0x34A = 10 * 1 + 4 * 16 + 3 * 16 * 16 = 10 + 64 + 768 = 842
--- 第二組(十進制轉其他進制)------------
規則:將該數不斷除以2/8/16,直到商為0,然后將每步得到的余數倒過來
1)十進制轉二進制
規則:將該數不斷除以2,直到商為0,然后將每步得到的余數倒過來
56 = (((((56 / 2)/2)/2))/2)/2 = 111000
2)十進制轉八進制
規則:將該數不斷除以8,直到商為0,然后將每步得到的余數倒過來
156 = ((156 / 8)/8)= 0234
3)十進制轉十六進制
規則:將該數不斷除以16,直到商為0,然后將每步得到的余數倒過來
356 = ((356 / 8)/8)= 164
--- 第三組(二進制轉其他進制)------------
規則:將二進制數每 3/4 位一組(從低位開始組合),轉成對應的八進制數即可
1)二進制轉八進制
規則:將二進制數每三位一組(從低位開始組合),轉成對應的八進制數即可
11010101 = 11(3)010(2)101(5)= 325
2)二進制轉十六進制
規則:將二進制數每四位一組(從低位開始組合),轉成對應的八進制數即可
11010101 = 1101(D)0101(5)= 0xD5
--- 第四組(其他進制轉二進制)------------
規則:將8/16進制數每1位,轉成對應的一個3/4位的二進制數即可
八進制轉二進制
規則:將八進制數每1位,轉成對應的一個3位的二進制數即可
237 = 2(010)3(011)7(111)= 010011111
十六進制轉二進制
規則:將十六進制數每1位,轉成對應的一個4位的二進制數即可
0x237A = 2(0010)3(0011)7(0111)A(1010)= 0010001101111010

原碼、反碼、補碼
對于有符號的而言
1).二進制的最高位是符號位,0正數,1負數
????1 => [0000 0001], -1 => [1000 0001]
2).正數的原碼/反碼/補碼都一樣
????1 => 原碼[0000 0001] 反碼[0000 0001] 補碼[0000 0001]
3).負數的反碼 = 它的符號位不變,其他位取反
4).負數的補碼 = 它的反碼 + 1
????-1 => 原碼[1000 0001] 反碼[1111 1110] 補碼[1111 1111]
5).0的反碼,補碼都是0
6).在計算機運算的時候,都是以補碼的方式運算的
????1 + 1 ; 1 - 1 = 1 + (-1)

& | << >>
& : 兩位全為1,結果為1,否則為0
| : 兩位有一位為1(包含兩位1),結果為1,否則為0
^ : 兩位一位為1(只有一位1),結果為1,否則為0
// 2的補碼 0000 0010
// 3的補碼 0000 0011// 2&3 ? ?0000 0010 => 2fmt.Println(2&3)// 2|3 ? ?0000 0011 => 3fmt.Println(2|3)// 2^3 ? ?0000 0001 => 1fmt.Println(2^3)// -2的原碼 1000 0010
// -2的反碼 1111 1101
// -2的補碼 1111 1110
// 2的補碼 ?0000 0010
// 結果的補碼 ? ?1111 1100
// 結果的反碼 ? ?1111 1011
// 結果的原碼 ? ?1000 0100 => -4fmt.Println(-2^2)
a := 1 >> 2b := -1 >> 2c := 1 << 2d := -1 << 2// 0000 0001 >> 0000 0000 => 0fmt.Println(a) // 0
// -1的原碼 1000 0001
// -1的反碼 1111 1110
// -1的補碼 1111 1111
// >>2 的補碼 ? ?1111 1111
// >>2 的反碼 ? ?1111 1110
// >>2 的原碼 ? ?1000 0001 => -1fmt.Println(b) // -1
// 0000 0001 >> 0000 0100 => 4fmt.Println(c) // 4
// -1的原碼 1000 0001
// -1的反碼 1111 1110
// -1的補碼 1111 1111
// <<2 的補碼 ? ?1111 1100
// <<2 的反碼 ? ?1111 1011
// <<2 的原碼 ? ?1000 0100 => -4fmt.Println(d) // -4
