156的十進制可以看做1*10^2 + 5*10^1 + 6*10^0
首先我們看一下156 ,平方,次方等等都是根據後面有多少位決定的,如果用計算機計算,則正好是156
33是一個八進制可以看做3*8^1+3*8^0 次方 換算出來就是10進制
如果你本身是x進制,那麼你的數字就看做 num * x^位數 比如我有一個16進制的數字,轉為10進制
16進制在計算機中表示方法: 1 2 3 4 5 6 7 8 9 a b c d e f
a代表10 b.. c.. 依次增加
C8 如果轉化為十進制則是 C * 16 ^1 + 8 * 16 ^0 則把C變為12去做
12 * 16 ^1 + 8 * 16 ^0 = 192 + 8 = 200 十進制的200 (任何數的0次方都是1)
既然一個n進制可以任意轉化為10進制,則10進制則可以任意轉化為n進制
思路:
10進制轉n進制就是不斷÷這個數的進制數
例如:
10進制的17 轉化為16 進制 17 / 16 = 1 ...1 結果是1,餘1,然後加起來 就是11
23(10進制) 轉化為八進制 23 / 8 = 2 ...7 結果就是27
這個比較簡單了,隻需要記住,4個二進制為對應一個16進制的一位
比如 1100 對應的16進制就是C
0000 代表0
0001 代表1
0010 代表2
0011 代表3
0100 代表4
0101 代表5
0110 代表6
0111 代表7
1000 代表8
1001 代表9
1010 代表a
1011 代表b
1100 代表c
1101 代表d
1110 代表e
1111 代表f
給你一個16進制數,把它變為二進制,則可以對應上面的表拆分
比如A32
拆分為 A 3 2 對應的二進制
A : 1010
3: 0011
2: 0010
這個需要注意一下,要把16進制的數字從右邊向左邊區分(4各一組)
1000110010
區分:
0010 0011 0010 前邊因為10就剩2個了,是以不足4位,需要補零
對應16進制的表去對拼即可: 結果為 232(16進制的) (轉化為10進制則用第一種方式,任何進制轉化為10進制)
八進制和第三種16進制轉化為二進制和2進制互轉類似,隻不過都是3個一組了(16進制和2進制是4個一組)
表:
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
随便一個八進制轉為二進制: 33 (一個差分為3個)
3: 011
3: 011
最終結果: 011011 如果滿足4為一組,則前邊補零,變為0001 1011
C語言代碼實作:
最終的輸出結果為7
一步一步的推算
首先把3和4分别給函數add為參數
然後循環判斷
A^b(3^4)二進制位011 100 亦或是相同為0不同為真
011
^
100
111 結果是7
指派給wei
但是因為是加法,是以還要考慮進位的問題
是以
(3&4 )<<1 算是他的進位然後左移一位
& 他的運算符特點是一方為假則全部為假
000 最終他的進位是0
最後再把最終的結果指派給a
進位指派給b
如果b這個儲存進位的結果不是0的話,那麼就繼續循環,一直到進位不為0的時候才傳回結果a
減法運算的話就是求補運算
A-b可以換算為加法
A+(100h-b)-100h
其實就是求b的補集
任何一個數加上b的反碼其常量值都是1
按照自己的了解的話
A+(100-b)-100
a代入數字為3
b代入數字為4
那麼a+(100-4)-100
則結果為3+96-100 = -1 這樣轉化為加法就實作了減法
他的設計就是進位丢失
假設是101 那麼如果第一個1丢失了,那麼就是丢棄了100
二進制x2的n次方就往左邊<<多少位
按照自己的了解假設是10*5
那麼10的二進制是1010
5的二進制是0101
1010 大于0101
那麼就是左移一位<1 變成5了.
如果有錯誤,歡迎批評指正: 聯系方式Q:2510908331