C 實現簡單無符號整數進製轉換器

2022-05-04 21:45:16 字數 2846 閱讀 1954

首先,說明一下什麼是進製.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:

1

#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

limit是輸入的十進位制數最多位數.若sizeof(unsigned)在某機器上為4,即無符號整數占用4byte,也即32位,最大數為2

32,根據2

10≈10

3,有2

20≈10

6  ,2

30≈10

9,因此2

32至少用10位10進製數表示,因此輸入的十進位制數最多10位.

main.cpp:

1 #include2 #include//

reverse函式宣告在次標頭檔案中

3 #include"

convertfuncs.h"//

自定義標頭檔案45

using

namespace

std;67

intmain()882

}8384return0;

85 }

本工程在gcc編譯器下編譯通過,成功執行.在gcc編譯器在,不允許在switch語塊中定義變數.

執行截圖:

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語言會隱式的將有符號引數強制型別轉換為無符號數,並假設這兩個數都是非負的,...