C/C++每日一問--進制轉(zhuǎn)換

6月收官,7月伊始,2020,進入暑期。
考研迎來了一個比較關(guān)鍵的時期,從現(xiàn)在開始進行專業(yè)課--C/C++的復習,為了保證學習質(zhì)量、夯實基礎,特別設置【每日一問】專欄,對自己的學習成果進行實踐檢驗以及知識拓展,裂變自己接觸和學習過的知識及技巧;主要是理論和實踐相結(jié)合,以基礎知識為主,實踐操作為輔,保證學習效果,和大家一起回顧知識,共同進步,加油!
特別提示:【每日一問】欄目包括但不限于【今日主題】、【實踐演練】、【知識裂變】等模塊,內(nèi)容比較基礎,適合新手學習以及熟手進行知識回顧,大神勿噴,請自動繞道,謝謝!
1今日主題-進制轉(zhuǎn)換
今天我們先來學習一下進制轉(zhuǎn)換,主要包括十進制與二進制、八進制、十六進制之間的相互轉(zhuǎn)換。
提示:
二進制:由0、1組成,末尾加B表示二進制;
八進制:由0~7中數(shù)字的組成,末尾加Q表示八進制;
十進制:由0~9中的數(shù)字組成,末尾加D表示十進制;
十六進制:由0~9、A(10)~F(15)中的數(shù)字、字母組成,末尾加H表示十六進制;
1、十進制-->“R”進制,R=2、8、16
整數(shù):除R取余法;
小數(shù):乘R取整法;
比如十進制轉(zhuǎn)二進制:
整數(shù):除2取余,按高位-低位排列,具體如下圖:

小數(shù):乘2取整,按高位-低位排列,具體如下圖:

2“R”進制轉(zhuǎn)十進制,R=8、16
根據(jù)進制進行求解:
八轉(zhuǎn)十:26Q = 2*81+ 6*80 = 22D;
十六轉(zhuǎn)十:26H = 2*161+ 6*160 = 38D。
3、二進制轉(zhuǎn)“R”進制,R=8、10、16
二轉(zhuǎn)八:取三合一;位數(shù)從高到低代表22、21、20,數(shù)字相乘加起來就是轉(zhuǎn)換后的數(shù)字,如:10 100 101 B,轉(zhuǎn)換為八進制為:245Q;
二轉(zhuǎn)十六:取四合一;位數(shù)從高到低代表23、22、21、20,數(shù)字相乘加起來就是轉(zhuǎn)換后的數(shù)字;
如:1001 0101 B,轉(zhuǎn)換為十六進制為:a5H;
二轉(zhuǎn)十:位數(shù)從高到低代表2n、...、23、22、21、20,數(shù)字相乘加起來就是轉(zhuǎn)換后的數(shù)字;
如:11001 B,1*24 +?1*23 +?0*22 +0*21 +?1*20 = 25 D。
2實踐演練-代碼實現(xiàn)
在實際應用中,我們有時候會遇到需要使用進制轉(zhuǎn)換功能,比如設計串口助手上位機時,有個16進制顯示的功能,這時候需要進行進制轉(zhuǎn)換。
上面咱們已經(jīng)學習了進制轉(zhuǎn)換的基本原理,接下來咱們就應該思考整理,如何編寫代碼實現(xiàn)進制轉(zhuǎn)換的功能。
3知識裂變-拓展學習
16進制轉(zhuǎn)10進制用C語言如何實現(xiàn)呢?
溫馨提示:C語言中沒有string的關(guān)鍵字的,一般我們是數(shù)組進行字符的存儲來進行計算,然后通過scanf和printf函數(shù)進行輸入和輸出。趕快去試一試吧。
問:用單片機做萬年歷,所使用的時鐘芯片DS1302讀取時間和設置時間時需要用到什么進制轉(zhuǎn)換?

掃描二維碼關(guān)注我
置頂/星標公眾號,和我一起學習吧!