首先,說明一下什麼是進製.n進製就是一種用來表示數值的方法,n進製,顧名思義,逢n進1.我們日常生活中使用的基本都是10進製數,逢10進1;現代計算機處理器所能處理的只能是2進製數,雖然好像前蘇聯曾經嘗試研製10進製計算機,最後當然無疾而終.
計算機使用2進製的原因是它實現簡單,僅有0和1兩個碼元,又和自然世界某些事物的兩種狀態相對應(比如開關的開和斷開,電平的高和低等).在我們記錄和組合語言的編寫中,常常使用16進製制數,便於書寫,因為乙個16進製制數對應4個2進製數.乙個8進製數對應3個2進製數,而乙個10進製數對應4個2進製數,存在6個冗餘碼.在高階程式語言中,2進製,8進製,16進製制分別用0b,0,0x作為字首表示,如0xb2代表10進製數178.在組合語言中,用b,o,h作為作為字尾表示,如30h代表十進位制數48,同時也是字元'0'的ascii碼.
實現該小程式的關鍵是數制轉換演算法.無符號整數從任意進製到10進製,按權展開即可;從十進位製到任意進製,採用短除法取餘數直至商為零.
短除法示例,十進位制數53對應二進位制數0b110101
下面進入正題,整個工程由自定義標頭檔案convertfuncs.h和源程式檔案main.cpp構成,**如下:
convertfuncs.h:
1limit是輸入的十進位制數最多位數.若sizeof(unsigned)在某機器上為4,即無符號整數占用4byte,也即32位,最大數為2#ifndef convertfuncs_h_included
2#define convertfuncs_h_included //
包含警戒
34 #include5
6using
namespace
std;78
const unsigned limit = (unsigned)(sizeof(unsigned) * 8 * 0.3 + 1); //
限定可處理的10進製數最多位數,由機器實現決定910
string decitohex(unsigned deci) //
10進製轉16進製制函式
1153}54
55 hexstr = hexstr.substr(0, i); //
取有字元的字串
5657 reverse(hexstr.begin(), hexstr.end()); //
使用迭代器反轉字串,因為寫入的高低位顛倒
5859
return hexstr; //
返回對應的16進製制數字串60}
6162
string decitooct(unsigned deci) //
10進製轉8進製函式,結構類似於上
6377
78 hexstr = hexstr.substr(0
, i);
7980
reverse(hexstr.begin(), hexstr.end());
8182
return
hexstr;83}
8485
string decitobin(unsigned deci) //
10進製轉2進製函式,結構類似於上
8697
98 hexstr = hexstr.substr(0
, i);
99100
reverse(hexstr.begin(), hexstr.end());
101102
return
hexstr;
103}
104105
long anytodeci(const string any, const unsigned scale) //
按權展開函式
106121
122123
#endif
//convertfuncs_h_included
32,根據2
10≈10
3,有2
20≈10
6 ,2
30≈10
9,因此2
32至少用10位10進製數表示,因此輸入的十進位制數最多10位.
main.cpp:
1 #include2 #include//本工程在gcc編譯器下編譯通過,成功執行.在gcc編譯器在,不允許在switch語塊中定義變數.reverse函式宣告在次標頭檔案中
3 #include"
convertfuncs.h"//
自定義標頭檔案45
using
namespace
std;67
intmain()882
}8384return0;
85 }
執行截圖:
C 進製轉換器
class transform internal string tentoeight long value 將十進位制轉換為八進位制 internal string tentosixteen long value 將十進位制轉換為十六進製制 internal string binarytoeight...
C 單位轉換器簡單案例
經過幾天學習,寫出了乙個簡單的winform應用程式,貼出原始碼,以備不時之需。軟體啟動後的介面如下圖所示 如圖,該程式由6個label 8個combobox 8個textbox和4個button組成。右邊4個textbox設定readonly屬性為true。軟體啟動時,可以讓combobox顯示預...
C語言有符號整數隱式轉換無符號整數出現的陷阱
include include int main 該程式意思是比較字串陣列s和字串陣列t的長度大小。按我們的理解,在第7行應該返回false,即輸出0。c語言執行運算時,如果它的乙個運算數是無符號的,而另乙個是有符號的,那麼c語言會隱式的將有符號引數強制型別轉換為無符號數,並假設這兩個數都是非負的,...