進製間的相互轉化總結 例題

2022-09-24 06:36:12 字數 4098 閱讀 5923

進製轉換:

1. 十六進製制與二進位制相互轉化

十六進製制的每一位佔二進位制中的四位,因此需要先定義十六進製制從0~f的二進位制值,即:

string a[16] = ;

下標即十六進製制數,再將每乙個對應的二進位制字串拼起來就可以了。如下例:

2. 八進位制與二進位制相互轉化

二進位制中的每三位對應八進位制中的一位,因此也需要先對八進位制中0~7定義其二進位制值,即:

string a[8] = ;
這樣其下標就是八進位制的值。

也可以用map定義,這樣就可以直接根據字串的值得到每一位八進位制的值,再拼湊起來就可以了。

3.二進位制轉十六進製制

和二進位制轉八進位制一樣,只不過這裡是每四位取乙個十六進製制,再拼起來就行了。如圖

4. 十進位制轉二進位制

用短除法。每次除以2,把餘數從下到上拼起來,就得到了八進位制的數。d代表十進位制數,b代表八進位制數。

補充:十進位制小數部分轉二進位制,」乘2取整「,小數部分乘以2,取整,再將小數部分乘以2,取整,直到達到題目要求精度。

例:0.68d = ______ b(精確到小數點後2位)

5. 十進位制轉八進位制

用短除法。每次除以8,把餘數從下到上拼起來,就得到了八進位制的數。d代表十進位制數,q代表八進位制數。

補充:十進位制小數部分轉八進位制,」乘8取整「,小數部分乘以8,取整,再將小數部分乘以8,取整,直到達到題目要求精度。

例:28.68d = ______ q(精確到小數點後3位)

6. 十進位制轉十六進製制

同理,略。

7. r進製轉十進位制

這個很簡單了。

7. 十六進製制轉八進位制

①先轉為二進位制。②再轉為八進位制。

提交此題

評測記錄

資源限制

時間限制:1.0s   記憶體限制:512.0mb

問題描述

給定n個十六進製制正整數,輸出它們對應的八進位制數。

輸入格式

輸入的第一行為乙個正整數n (1<=n<=10)。

接下來n行,每行乙個由0~9、大寫字母a~f組成的字串,表示要轉換的十六進製制正整數,每個十六進製制數長度不超過100000。

輸出格式

輸出n行,每行為輸入對應的八進位制正整數。

【注意

輸入的十六進製制數不會有前導0,比如012a。

輸出的八進位制數也不能有前導0。

樣例輸入239

123abc

樣例輸出

714435274

提示】

先將十六進製制數轉換成某進製數,再由某進製數轉換成八進位制。

實現**:

#include #include 

#include

using

namespace

std;

//儲存16進製制的0~f的二進位制值

string a[16] = ;

//儲存八進位制0~7的二進位制值

unordered_mapmp;

string change16to2(string

s) else

}returnx;}

string change2to8(string

s) }

for (int i = 0; i < s.length(); i += 3

)

returnx;}

string remove0(string

s)

returns;}

intmain()

return0;

}

提交此題

評測記錄

資源限制

時間限制:1.0s   記憶體限制:512.0mb

問題描述

從鍵盤輸入乙個不超過8位的正的十六進製制數字串,將它轉換為正的十進位制數後輸出。

注:十六進製制數中的10~15分別用大寫的英文本母a、b、c、d、e、f表示。

樣例輸入

ffff

樣例輸出

65535

解決**:

#include #include 

#include

using

namespace

std;

mapp;

intmain()

sum += p[a[i]] *sum;

}cout

<< sum <

return0;

}

提交此題

評測記錄

資源限制

時間限制:1.0s   記憶體限制:512.0mb

問題描述

十六進製制數是在程式設計時經常要使用到的一種整數的表示方式。它有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f共16個符號,分別表示十進位制數的0至15。十六進製制的計數方法是滿16進1,所以十進位制數16在十六進製制中是10,而十進位制的17在十六進製制中是11,以此類推,十進位制的30在十六進製制中是1e。

給出乙個非負整數,將它表示成十六進製制的形式。

輸入格式

輸入包含乙個非負整數a,表示要轉換的數。0<=a<=2147483647

輸出格式

輸出這個整數的16進製表示

樣例輸入

30樣例輸出

1e解決**:

#include using

namespace

std;

intmain() ;

int n, i = 0

; cin >>n;

if (n == 0

) cout

<< "0"

<

while

(n)

} else

i++;

n /= 16

; }

for (int j = i - 1; j >= 0; j--)

cout

<

cout

<

return0;

}

進製間的相互轉化

原文 進製間的相互轉化 進製間的轉換如下圖所示 由上圖可知,進製間共有12種轉換。下面將逐一介紹這12種轉換方法 1 二進位制轉化為八進位制 原理 1 1位八進位制數可以用3位二進位制數碼表示 2 以小數點為邊界 若小數點左側 即整數部分 不是3的整數倍,則在最左側補零,對小數點右側 即小數部分 應...

進製的相互轉化

我們常用的進製包括 二進位制 八進位制 十進位制與十六進製制,它們之間區別在於數運算時是逢幾進一位。十進位制轉二進位制 方法為 十進位制數除2取餘法,即十進位制數除2,餘數為權位上的數,得到的商值繼續除2,依此步驟繼續向下運算直到商為0為止。二進位制轉十進位制 方法為 把二進位制數按權展開 相加即得...

進製之間的相互轉化

由乙個問題想到的!這個問題是 在windows計算器裡,用programmer方式,選擇dword即32位編碼,然後切換到16進製制,輸入80800006,再轉化成十進位制,會得到乙個負數 2139095034 在c 裡面80800006是乙個uint變數,如何把它變成乙個int的負數?答案 uin...