「學習筆記」進位制轉換
前言
由於本人正在準備自考,所以學習下c語言以及相關的基礎,最近會更新很基礎的知識
進位制
常用的進位制分別為2進位制、10進位制(生活常用)、16進位制
進位制間的關係表
二進位制 | 十進位制 | 十六進位制 |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
10 | 2 | 2 |
11 | 3 | 3 |
100 | 4 | 4 |
101 | 5 | 5 |
110 | 6 | 6 |
111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | 10 | A |
1011 | 11 | B |
1100 | 12 | C |
1101 | 13 | D |
1110 | 14 | E |
1111 | 15 | F |
10000 | 16 | 10 |
10001 | 17 | 11 |
... | ... | ... |
11111111 | 255 | FF |
進位制間的轉換
二進位制轉十進位制
1.簡單方法: 適用於所有位上均為1的情況
公式: result = 2^n -1
說明:result為十進位制結果,n為1的個數
讀作:2的n次方減1
例:1111有4個1,那麼就有 2^4 - 1 = 16 -1 = 15
2.無符號按位加權:適用於無符號情況(c語言中int型預設有符號)
二進位制8位數,從右往左從0~7寫位權
公式: result = n1x2^7 + n2x2^6 + n3x2^5 + n4x2^4 + n5x2^3 + n6x2^2 + n7x2^1 + n8x2^0
說明:result為結果,n1~n8分別為二進位制數第1到第8位數,2的位權次方
讀作: 每個二進位制數位與2的位權次方之和
舉例:111的前五位均為0,那麼乘後也為0,2的0次方為1省略不計算,
1x2^2 + 1x2^1 + 1x2^0 = 4+2+1 = 7
3.有符號按位加權:負數,符號位為1;非負數符號位為0
其中符號位為0(正數)的情況下與上述方法完全相同。
符號位為1的時候(負數),在計算第1位前乘-1
公式: result = -n1x2^7 + n2x2^6 + n3x2^5 + n4x2^4 + n5x2^3 + n6x2^2 + n7x2^1 + n8x2^0
舉例:有符號10000000轉十進位制,首先是有符號並且符號位為1,說明是負數,則有
-1x2^7 + 0x2^6 + 0x2^5 + 0x2^4 + 0x2^3 + 0x2^2 + 0x2^1 + 0x2^0 = -128
十進位制轉二進位制
取餘法
- 將十進位制數進行多次除二,直到商為0,記錄每次是否被整除,整除記0,不整除記1
- 將記下的數由下至上即可得到二進位制數
舉例:十進位制18,第一次整除記0,第二次不整除記1,第三次四次記0,最後一次記1,倒序就是10010
二進位制轉16進位制
查表法
一旦遇到很多二進位制數,你就從右往左,每四個為一組
一旦遇到十六進位制數,把每個十六進位制數拆解成 4 位二進位制數
Linux上轉換進位制
- 使用bc命令,需要安裝bc
echo "obase=x;ibase=y;z" | bc
- 使用
((num=x#y))&& echo $num
轉換十進位制- 說明 x為進位制數,y為輸入數
本文整理自小甲魚的論壇,原貼見 ofollow,noindex" target="_blank">連結