當前位置:首頁 » 編程語言 » c語言中數字進制轉換
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中數字進制轉換

發布時間: 2022-12-23 00:59:51

c語言中進制如何轉換

#include
<stdio.h>
int
main(void)
{
int
a8,
b10,
c16;/*a8,b10,c16分別代表八進制數,十進制數和十六進制數*/
scanf("%o%d%x",
&a8,
&b10,
&c16);
printf("%o,%d,%x\n",
a8,a8,a8);
printf("%o,%d,%x\n",
b10,b10,b10);
printf("%o,%d,%x\n",
c16,c16,c16);
}
要重復,添加循環就OK了。
這里簡單的實現你的輸入和輸出功能,並沒有真正從運算規則上去進行轉換,你也沒做這樣的要求,不知道是不是你想要的結果。

㈡ C語言進制轉換

計算機中常用的數的進制主要有:二進制、八進制、十進制、十六進制。  

2進制,用兩個阿拉伯數字:0、1;  

8進制,用八個阿拉伯數字:0、1、2、3、4、5、6、7;  

10進制,用十個阿拉伯數字:0到9;  

16進制就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。 

下面用余數短除法把十進制數轉化為二進制數為例進行說明

1、明確問題。舉個例子,我們現在是要將一個十進制數字156轉換成二進制數字。先將這個十進制數作為被除數寫在一個倒著的「長除法」的符號里。把目標數系的基數(在這里二進制是「2」)作為除數寫在這個除法符號的外面。用這個方法將計算過程可視化會更方便理解,因為整個計算過程只需將數字一直除以2。

活用這個方法可以將所有十進制數字轉換成任何進製表達。除數為2是因為我們最終想得到的以2為基數的數(即二進制數值) 。如果最終想得到其他數系的數字,用目標數系的基數代替這個方法里二進制的基數2 就可以了。例如,要得到基數為9的數,就用9來代替2作為除數 。最終的結果就是目標數系的數字表達。

(2)c語言中數字進制轉換擴展閱讀:

十進制--->二進制

對於整數部分,用被除數反復除以2,除第一次外,每次除以2均取前一次商的整數部分作被除數並依次記下每次的余數。另外,所得到的商的最後一位余數是所求二進制數的最高位。

對於小數部分,採用連續乘以基數2,並依次取出的整數部分,直至結果的小數部分為0為止。故該法稱「乘基取整法」

十進制--->八進制

10進制數轉換成8進制的方法,和轉換為2進制的方法類似,唯一變化:除數由2變成8。

㈢ C語言進制轉換

支持zpfloveyfy的分析,程序風格也很好。
我在這給個數制轉換的公式:
十進制數N和其他d進制數的轉換基於以下公式:
N
=
(N
div
d)
*
d
+
N
mod
d;
其中:div為整除,mod為求余。
例如將10進制1348轉化成2504,運算過程如下:
N
Ndiv8
Nmod8
1348
168
4
168
21
0
21
2
5
2
0
2
看起來有點亂,因為這里會把原來的格式給打亂。
由最後一列4052可以看出,正好是結果2504的倒數,所以用棧來實現它是最理想不過的了。

㈣ C語言進制及其轉換

###常用的幾種進制:任何進制計數,高位都在左邊,右邊為低位,在高位前補0對於整個數的值得大小沒有影響,但絕對不可以在低位後補0,因為這樣會改變數的大小;

1.最常用的:十進制

要點 a:在十進制中的每一位數的取值范圍必須在0~9,如果其中某一位數超過9,則必須用多位數進行表示,其中低位和相鄰高位之間的運算關系遵守 「逢十進一」 ;

要點 b:運算

例:147.75=1*10^2+4*10^1+7*10^0+7*10^-1+5*10^-2

2.二進制:

要點    a:在二進制中,每一位只能在0~1中取,所以二進制的基數2,其中低位和相鄰的高位之間的運演算法則遵循  「逢二進一 」(像十進制的逢十進一樣);

要點 b:運算

例:101.1=1*2^2+0*2^1+1*2^0+1*2^-1=(5.5)10

要點  c:二進制的前綴為:0b或b開頭

3.八進制:

要點 a:八進制的每一位數只能在0~8中取一個,並且基數的基數是8,其中低位和相鄰的高位之間的運算關系遵循 「 逢八進一 」;

要點 b:運算

例:(12.4)8=1*8^1+2*8^0+4*8^-1=(10.5)10

要點 c :八進制的前綴為0;在八進制數字中的每一位數字在0~8區間;例:0157等

4.十六進制:

要點 a:十六進制數的每一位有16個不同的數碼,分別用0~9、A(10)、B(11)、C(12)、D(13)、

E(14)、F(15)表示。(A~F大小寫均可);計數的基數為16,其中低位和相鄰的高位之間的運算關系遵循 「逢十六進一」;

要點 b:運算

例:(2A.7F)16=2*16^1+10*16^0+7*16^-1+15*16^-2=(42.4960937)10

###進制之間的轉換:

1.二進制與十進制:

規則:以2為底,從低位向高位每一位進行2冪運算,再和與之對應的位進行乘法運算,然後求和;

例:01011011(八位的一個二進制數轉換為十進制數)

0           1        0            1            1            0            1         1

2^7    2^6    2^5       2^4           2^3        2^2       2^1     2^1 

運算時只需將   0/1  下面相對應的以2為底的冪進行相乘後求和即可:

0*2^7+1*2^6+0*2^5+1*2^4+1*2^3+0*2^2+1*2^1+1*2^0=91;

例:將十進制數57轉換為二進制數:

十進制轉二進制就是對十進制數的一個以2為除數的求余過程:

57 / 2 =28……1

28 / 2 =14……0

14 /  2=7……0

7  /  2 =3……1

3 / 2 =1……1

2  / 2  =0…… 1

 @注意: 在書寫二進制的結果時,要倒著寫 :即結果為:111001  或   00111001

2.二進制轉八進制:

對於二進制轉八進制來講,把二進制從低位向高位進行3位二進制數為一個單位進行劃分,也就是說

3位二進制對應1位八進制數。

                        421                 421        421(快捷演算法)

例:二進制: 010                 001        101        (與下面八進制的數字相對應)

        八進制 :  2                     1            5

其中    二進制的010對應的421中,因4對應0,1對應0,所以沒有值,1對應2,所以值為2,所以 以010這3個數為一個單位的數的值為2;二進制中101對應的421中,4對應1,2對應0,1對應1,所以 以101為一個單位的數的值為4+1=5;所以二進制數   010001101    對應的八進制數位    215;

八進制轉二進制:

同樣,只要逆向思維就可以了:一位八進制數對應3位二進制數;

例:八進制        2                    1                        5

        二進制        010               001                  101

                            421                421                  421 

                0+2+0=2            0+0+1=1                4+0+1=5

寫結果時:一般會寫成10001101;程序員一般會將高位數前的0省略,值不變

3.二進制轉十六進制

要點: 對於二進制轉十六進制來講,把二進制從低位向高位進行4位二進制數  做為一個單位進行劃分,也就是說 4位二進制對應1位十六進制數。

例:將 01011110 二進制數轉換為十六進制數

                   8421                         8421

二進制        0101                        1110

十六進制         5                               E

注釋:同理:5=8*0+4*1+2*0+1*1        E(14)=8*1+4*1+2*1+1*0

所以:寫法為     (01011110)2=(5E)16

十六進制轉二進制:

同樣,只要逆向思維就可以了: 一位十六進制數對應4位二進制數

例:            8                        F                        A

                1000                    1111                  1010      

                8421                    8421                   8421

8=8*1+4*0+2*0+1*0        F(15)=8*1+4*1+2*1+1*1            A(10)=8*1+4*0+2*1+1*0

所以:(8FA)16=(100011111010)2

###原碼、反碼、補碼

1.機器數:一個數在計算機中的二進製表現形式;機器數是帶符號的,在計算機用一個數的最高存放符號,正數為0,負數為1;如:十進制中的數+3,計算機字長尾8位,轉換成二進制數就是00000011.如果是-3,那就是10000011;那麼,這里的00000011和10000011就是機器數。

2.真值:因為第一位是符號位,所以機器數的形式值就不等於真正的數值。

3.原碼:原碼就是符號位加上真值的絕對值。

例:+1(原碼)=0000 0001

        -1(原碼)=1000  0001

從中可以看出,對於二進制來說,最高位就是符號位,1就是代表的負數,0就代表正數,所以一個8位的二進制數它能表達的取值范圍應該是【11111111,01111111】;即【-127,127】但char類型佔一個位元組,所以取值范圍為【-128,127】

4.反碼:正數的原碼,反碼是一樣的;負數的反碼就是符號位不變,其他位在原碼的基礎上取反,即0變為1,1變為0.

原碼                                                                    反碼

+1    +0000 0001                                                0000 0001

-1     1000 0001                                                  1111    1110

+0     0000 0000                                                  0000 0000

-0       1000 0000                                                  1111 1111

5.補碼:

正數的原碼、反碼、補碼就是其本身;負數的補碼是在其原碼的基礎上,符號位不變,其餘各取反,最後+1(即 在反碼的基礎上+1)

例  :         原碼                                反碼                            補碼

+1        0000  0001                        0000    0001                0000    0001

-1        1000    0001                       1111    1110                   1111   1111

+0        0000    0000                        0000       0000            0000 0000

-0          1000    0000                       1111    11111                10000    0000

在最後一行中,-0的補碼得出來是一個9位的二進制數,由於我們測試的是8位,所以,應該把最

最高位捨去,因為數據在存儲的時候是由高到低進行存儲,所以-0的補碼應該是0000 0000

注意:在計算機存儲數據時,計算機是採用二進制 補碼的形式 進行存儲

#include <stdio.h>

int main(){

int     x=1;//定義一個Int類型的變數名為x的變數

int       y=~x;//~這個是取反符號

printf("%d\n",y);

return 0;

}

輸出結果為:-2

㈤ C語言中怎樣調用函數將十進制轉換成二進制

1、打開visualC++6.0-文件-新建-文件-C++SourceFile。

㈥ C語言中的進制怎麼轉換啊

關於進制轉換,我覺得挺好玩的不就是幾個公式吧了,
就如我第一次所學的二進制轉換為十進制,十進制轉換為二進制,那樣的類型其實也挺有趣的
比如:一個二進制數轉化為十進制數,如哦我所給的一個二進制數「101101001」我就設十進制數是Z
首先有個公式可套:Z=1*X8+0*X7+1*X6+1*X5+0*X4+1*X3+0*X2+0*X1+1*X0
把只是X換為2,算出來的就是你所得到的此二進制數所對應的十進制數
同理:如八進制數轉換為十進制數就是把X換為8,十六進制數轉換十進制數把X換為16,
至於二進制數轉化為八進制數更有意思;
首先我引進一個例子:這是一個比較特殊的二進制數:111111111111
首先把這組數按三個數劃分一組(從右開始劃分):如,111,111,111,111 於是結果是7777
然後就分別把化為各組的數組轉化為是進制數,最後進把你剛才算出的數按原來的順序排起來,於是得到的結果就是你想要的
那十六進制就是把數組中的每四個劃分一組(從右開始劃分的)
如111111111111劃分結果為1111,1111,1111, 方法與上面一樣,於是它的結果是fff

關於十進制轉化二進制,八進制和十六進制,方法都是一樣的
同二進制方法雷同。

㈦ C語言中八進制和16進制怎麼表示

一、八進制由 0~7 八個數字組成,使用時必須以0開頭(注意是數字 0,不是字母 o),例如:

//合法的八進制數

int a = 015; //換算成十進制為 13

int b = -0101; //換算成十進制為 -65

int c = 0177777; //換算成十進制為 65535

//非法的八進制

int m = 256; //無前綴 0,相當於十進制

int n = 03A2; //A不是有效的八進制數字

二、十六進制由數字 0~9、字母 A~F 或 a~f(不區分大小寫)組成,使用時必須以0x或0X(不區分大小寫)開頭,例如:

//合法的十六進制int a = 0X2A; //換算成十進制為 42

int b = -0XA0; //換算成十進制為 -160

int c = 0xffff; //換算成十進制為 65535

//非法的十六進制

int m = 5A; //沒有前綴 0X,是一個無效數字

int n = 0X3H; //H不是有效的十六進制數字

二進制化為八進制

整數部份從最低有效位開始,以3位一組,最高有效位不足3位時以0補齊,每一組均可轉換成一個八進制的值,轉換完畢就是八進制的整數。

小數部份從最高有效位開始,以3位一組,最低有效位不足3位時以0補齊,每一組均可轉換成一個八進制的值,轉換完畢就是八進制的小數。

例:(11001111.01111)2 = (011 001 111.011 110)2 = (317.36)8

以上內容參考:網路-八進制

㈧ C語言如何實現十六進制轉換成十進制

C語言實現十六進制轉換成十進制如下:

例如將十六進制數字 9FA8C 轉換成十進制

9FA8C = 9×164 + 15×163 + 10×162 + 8×161 + 12×160 = 653964(十進制)。

從右往左看,第1位的位權為 160=1,第2位的位權為 161=16,第3位的位權為 162=256,第4位的位權為 163=4096,第5位的位權為 164=65536 …… 第n位的位權就為 16n-1。

將各個位的數字乘以位權,然後再相加,就得到了十進制形式。

十六進制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方。

所以,在第N(N從0開始)位上,如果是是數 X (X 大於等於0,並且X小於等於 15,即:F)表示的大小為 X * 16的N次方。

再例如:十六進制:EA7 = 14×162 + 10×161 + 7×160 = 3751(十進制)。



(8)c語言中數字進制轉換擴展閱讀:

C語言10進制轉16進制

把十進制的數不停除以16的余數按從右到左的順序排起來就是16進制,例如:55/16=0餘5例如100 100/16=6餘4 6/16餘6,所以就是64,再例如1000 1000/16=62餘8 62/16=3餘12 3/16餘3所以結果是3C8 //。

對於整數部分,用被除數反復除以2,除第一次外,每次除以2均取前一次商的整數部分作被除數並依次記下每次的余數。另外,所得到的商的最後一位余數是所求二進制數的最高位。

對於小數部分,採用連續乘以基數2,並依次取出的整數部分,直至結果的小數部分為0為止。