當前位置:首頁 » 編程語言 » c語言數字進制

c語言數字進制

發布時間: 2022-11-30 12:12:16

A. 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

B. c語言的二進制、八進制、十六進制之類的進制是什麼意思舉幾個例子。

進制---即逢幾進一的意思;二進制即逢二進一,八進制即逢八進一,十六進制即逢十六進一
如:十進制逢時進一,計數規則為:0、1、2、3、4、5、6、7、8、9;數到10的時候向前進1變為10、11等等
二進制是逢二進一,計數規則為0、1,該數到2時向前進1,變為10(對應十進制的2)、11(對應十進制的3)

C. C語言中的進制是什麼意思

進制是一種計數方法,生活中常用的是10進制,數字電路中用2進制,只有0和1兩個數,逢二進1的原則,其實還有16進制和8進制,都是為是計數需要。他們之間可以相互轉換,有方法和公式的。

D. C語言中16進制的表示方法

16進制以0x開頭,後面跟數字0~9或字母A~F(小寫也可以),如:0x2D(16進制數2D)

E. C語言中進制的表示和轉換

C語言中常用的有十進制、二進制、八進制(用0表示)、十六進制(用0x表示)。

十進制轉二進制:

十進制轉二進制採取除於2取余的方式。

將十進制數除於2得到商和余數,

將商繼續除於2一直到商為0,

將得到的余數倒敘排列就是轉換為二進制的結果

二進制轉十進制:

從右向左用二進制位上的每一個數乘以2的相應次方

如二進制1010轉換為十進制:

1010 = 0*(2的0次方)+1*(2的1次方)+0*(2的2次方)+1*(2的3次方) = 2 + 8 = 10

八進制轉換為二進制

將二進制數自右向左每三位分為一段(若不足三位用0補齊),

然後將二進制的每三位轉換為一位八進制數

如將二進制數0101010轉換為八進制:

0 101 010不夠三位的補0得到

000 101 010 = 052 = 0052(八進制用0表示)

十六進制轉換為二進制

將二進制數自右向左每四位分為一段(若不足三位用0補齊),

然後將二進制的每4位轉換為一位十六進制數

如將二進制數0101100轉換為十六進制:

010 1100不夠三位的補0得到

0010 1100 = 2C= 0x2C(十六進制用0x表示)

F. c語言中十六進制和八進制的格式

16進制以0x開頭,後面跟數字0~9或字母A~F(小寫也可以)。如:0x2D(16進制數2D)
8進制以0開頭,後面跟數字0~7。如:045(8進制數45)
如果使用printf函數輸出時,可以通過格式數明符來控制輸出格式。
舉例如下:
int x=23;
printf("%x", x); // 以16進制格式輸出,輸出17;
printf("%o", x); // 以8進制格式輸出,輸出2。

(6)c語言數字進制擴展閱讀:
C語言是國際上廣泛流行的、很有發展前途的計算機高級語言。它適合作為系統描述語言,即可用來編寫系統軟體,也可用來編寫應用軟體。
早期的操作系統等系統軟體主要是用匯編語言編寫的(包括
UNIX操作系統在內)。由於匯編語言依賴於計算機硬體,程序的可讀性和可移植性都比較差。為了提高可讀性和可移植性,最好改用高級語言,但一般的高級語言難以實現匯編語言的某些功能(匯編語言可以直接對硬體進行操作),例如:對內存地址的操作、位操作等)。人們設想能否找到一種既具有一般高級語言特性,又具有低級語言特性的語言,集它們的優點於一身。於是,C語言就在這種情況下應運而生了。

G. 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。字母不區分大小寫。

以下簡介各種進制之間的轉換方法:
一、二進制轉換十進制
例:二進制 「1101100」
1101100 ←二進制數
6543210 ←排位方法

例如二進制換算十進制的演算法:
1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20
↑ ↑
說明:2代表進制,後面的數是次方(從右往左數,以0開始)
=64+32+0+8+4+0+0
=108

二、二進制換算八進制
例:二進制的「10110111011」
換八進制時,從右到左,三位一組,不夠補0,即成了:
010 110 111 011
然後每組中的3個數分別對應4、2、1的狀態,然後將為狀態為1的相加,如:
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
結果為:2673

三、二進制轉換十六進制
十六進制換二進制的方法也類似,只要每組4位,分別對應8、4、2、1就行了,如分解為:
0101 1011 1011
運算為:
0101 = 4+1 = 5
1011 = 8+2+1 = 11(由於10為A,所以11即B)
1011 = 8+2+1 = 11(由於10為A,所以11即B)
結果為:5BB

四、二進制數轉換為十進制數
二進制數第0位的權值是2的0次方,第1位的權值是2的1次方……
所以,設有一個二進制數:0110 0100,轉換為10進制為:
計算: 0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100

五、八進制數轉換為十進制數
八進制就是逢8進1。
八進制數採用 0~7這八數來表達一個數。
八進制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方……
所以,設有一個八進制數:1507,轉換為十進制為:
計算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839
結果是,八進制數 1507 轉換成十進制數為 839

六、十六進制轉換十進制
例:2AF5換算成10進制
直接計算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997
(別忘了,在上面的計算中,A表示10,而F表示15)、

現在可以看出,所有進制換算成10進制,關鍵在於各自的權值不同。
假設有人問你,十進數 1234 為什麼是 一千二百三十四?你盡可以給他這么一個算式: 1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100

十進制與二進制轉換之相互演算法
十進制轉二進制:

用2輾轉相除至結果為1

將余數和最後的1從下向上倒序寫 就是結果

例如302

302/2 = 151 餘0

151/2 = 75 餘1

75/2 = 37 餘1

37/2 = 18 餘1

18/2 = 9 餘0

9/2 = 4 餘1

4/2 = 2 餘0

2/2 = 1 餘0

故二進制為100101110

二進制轉十進制

從最後一位開始算,依次列為第0、1、2...位

第n位的數(0或1)乘以2的n次方

得到的結果相加就是答案

例如:01101011.轉十進制:

第0位:1乘2的0次方=1

1乘2的1次方=2

0乘2的2次方=0

1乘2的3次方=8

0乘2的4次方=0

1乘2的5次方=32

1乘2的6次方=64

0乘2的7次方=0

然後:1+2+0

+8+0+32+64+0=107.

二進制01101011=十進制107.

一、二進制數轉換成十進制數

由二進制數轉換成十進制數的基本做法是,把二進制數首先寫成加權系數展開式,然後按十進制加法規則求和。這種做法稱為"按權相加"法。

二、十進制數轉換為二進制數

十進制數轉換為二進制數時,由於整數和小數的轉換方法不同,所以先將十進制數的整數部分和小數部分分別轉換後,再加以合並。

1. 十進制整數轉換為二進制整數

十進制整數轉換為二進制整數採用"除2取余,逆序排列"法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余數,如此進行,直到商為零時為止,然後把先得到的余數作為二進制數的低位有效位,後得到的余數作為二進制數的高位有效位,依次排列起來。

2.十進制小數轉換為二進制小數

十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。

然後把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,後取的整數作為低位有效位。

1.二進制與十進制的轉換

(1)二進制轉十進制<BR>方法:"按權展開求和"

例:

(1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10

=(8+0+2+1+0+0.25)10

=(11.25)10

(2)十進制轉二進制

· 十進制整數轉二進制數:"除以2取余,逆序輸出"

例: (89)10=(1011001)2

2 89

2 44 …… 1

2 22 …… 0

2 11 …… 0

2 5 …… 1

2 2 …… 1

2 1 …… 0

0 …… 1

· 十進制小數轉二進制數:"乘以2取整,順序輸出"

例:

(0.625)10= (0.101)2

0.625

X 2

1.25

X 2

0.5

X 2

1.0

2.八進制與二進制的轉換

例:將八進制的37.416轉換成二進制數:

37 . 4 1 6

011 111 .100 001 110

即:(37.416)8 =(11111.10000111)2

例:將二進制的10110.0011 轉換成八進制:

0 1 0 1 1 0 . 0 0 1 1 0 0

2 6 . 1 4

即:(10110.011)2 =(26.14)8

3.十六進制與二進制的轉換<BR>例:將十六進制數5DF.9 轉換成二進制:

5 D F . 9

0101 1101 1111.1001

即:(5DF.9)16 =(10111011111.1001)2

例:將二進制數1100001.111 轉換成十六進制:

0110 0001 . 1110

6 1 . E

即:(1100001.111)2 =(61.E)16

H. C語言進制數

嗯,沒聽懂什麼意思...
c語言中的十六進制數用0x表示十六進制數
比如說,0x20表示的就是十六進制數20
若在匯編中則表示為:20h
二進制數表示為:00100000b
十進制即為,0*16^0+2*16^1=32

I. 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的倒數,所以用棧來實現它是最理想不過的了。

J. 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了。
這里簡單的實現你的輸入和輸出功能,並沒有真正從運算規則上去進行轉換,你也沒做這樣的要求,不知道是不是你想要的結果。

熱點內容
在jsp中使用資料庫 發布:2024-03-29 19:29:01 瀏覽:785
dns伺服器江川區ip地址 發布:2024-03-29 18:47:53 瀏覽:327
sql統計百分比 發布:2024-03-29 18:47:14 瀏覽:691
javatoolsfor 發布:2024-03-29 18:17:55 瀏覽:900
linuxi2c驅動 發布:2024-03-29 18:09:56 瀏覽:672
junit源碼下載 發布:2024-03-29 18:00:10 瀏覽:526
本田雅閣壓縮機不工作 發布:2024-03-29 17:59:13 瀏覽:601
溯源碼可以偽造嗎 發布:2024-03-29 17:54:45 瀏覽:57
北京編程傳 發布:2024-03-29 17:54:44 瀏覽:436
編程畫曲線 發布:2024-03-29 17:48:59 瀏覽:60