當前位置:才華齋>計算機>C語言>

C語言中進位制知識集錦

C語言 閱讀(1.02W)

C語言裡,整數有三種表示形式:十進位制,八進位制,十六進位制。 本文是本站小編搜尋整理的C語言中進位制知識集錦,有需要的小夥伴可以參考一下,希望對大家有所幫助!想了解更多相關資訊請持續關注我們應屆畢業生考試網!

C語言中進位制知識集錦

其中以數字0開頭,由0~7組成的數是八進位制。以0X或0x開頭,由0~9,A~F或a~f 組成是十六進位制。除表示正負的符號外,以1~9開頭,由0~9組成是十進位制。

  1.什麼是進位制

進位制是一種計數的方式,常用的有二進位制、八進位制、十進位制、十六進位制。任何資料在計算機記憶體中都是以二進位制的形式存放的。

我對進位制的個人理解,二進位制數是以2為計算單元,滿2進1位的數;八進位制數是以8為計算單元,滿8進1位的數。

對於任何一個數字,我們都可以用不同的進位制來表示,比如,十進位制數12,用二進位制表示為1100,用八進位制表示為14,用十六進位制表示為0xC。

  2.進位制的轉換規則

遵循滿進位制值進1位,個位數變為0的原理,下面我們以十進位制數18為例,對1-18中每一個數值轉換各種進製做一個詳細說明

轉二進位制:

1小於2,無需進1位,1的二進位制值是1

2為二進位制值1後面一個數,由於1+1滿2,需要進1位,個位數變為0,所以2的二進位制值是10

3為二進位制值10後面一個數,由於11的個位數1小於2,無需進1位,所以3的二進位制值是11

4為二進位制值11後面一個數,由於11的個位數1+1滿2,需要進1位,而二進位制值11的位數1+1又滿2,所以位數加1,最終轉換結果為100

轉換思路:二進位制值11+1 ->10+(1+1)(個位等於2,進1位,個位數變為0) ->(1+1)+0(位數滿2,進1位) -> 100

以此類推,最終十進位制數18的二進位制轉換結果是10010

轉八進位制:

1-7小於8,無需進1位,1-7的'八進位制由1-7表示

8為八進位制值7後面一個數,由於7+1滿8,需要進1位,個位數變為0,所以8的八進位制值是10

以此類推,最終十進位制數18的八進位制轉換結果是22

轉十六進位制

十六進位制中,個位數1-15分別為1 2 3 4 5 6 7 8 9 a b c d e f (a=10....f=15)

16為十六進位制值c後面1個數,由於c+1滿16,需要進1位,個位數變為0,所以16的十六進位制是10。

最終十進位制數18的十六進位制轉換結果是12

詳細結果如下圖所示(C語言把數字前面加0x的數認為是十六進位制數)

  3.C語言中int型別進位制的宣告以及佔位符

雖然以下3個變數的賦值方式不同,但實際賦值結果都是18

複製程式碼程式碼如下://二進位制型別數字加0b int number1 = 0b10010; //八進位制型別數字加0 int number2 = 022; //十六進位制型別數字加0x int number3 = 0x12;

八進位制佔位符:%o

十六進位制佔位符:%x

  4.記憶體儲存資料細節

我們知道,int型別資料佔據4個位元組,1個位元組是8bit。並且任何資料在計算機記憶體中都是以二進位制的形式存放的,所以記憶體需要用32個0或1來描述1個int型別資料。

由於18的二進位制數是10010,我們將一個int型別變數賦值18,本質上是將這個變數的記憶體地址對應的32個bit位修改為:

0000 0000 0000 0000 0000 0000 0001 0010(未滿31位,後面的數字用0填充:為什麼是31而不是32呢,後面會介紹)

假設我們定義兩個變數

//二進位制型別數字加0b

int number1 = 0b10010;

//八進位制型別數字加0

int number2 = 022;

//十六進位制型別數字加0x

int number3 = 0x12;

計算機會根據記憶體地址以由大到小的順序進行分配記憶體空間,具體如下圖所示:

  5.進位制的轉換公式

二進位制轉十進位制

0b1100 ->0*2的0次方 + 0*2的1次方 + 1*2的2次方 + 1*2的3次方 = 12

十進位制轉二進位制

67 ->64+2+1 ->2的6次方+ 2的1次方 + 2的0次方 = 0b1000011

  6.進位制的其他知識

1.n位二進位制能儲存的整數範圍公式:2的n次方-1

例如,3位的二進位制數最大值為111,對應的十進位制數字為7;5位的二進位制數最大值為11111,對應的十進位制數字為(2*2*2*2*2)-1 = 31。

2.負數的二進位制儲存規則是最左邊的數字是1。例如,0000 0000 0000 0000 0000 0000 0001 0010 表示正整數,1111 1111 1111 1111 1111 1111 1110 1101表示負數

由此,我們就能推測出,int型別能儲存的最大整數是2的(32-1)次方-1 =2147483647。為什麼要用32-1,很簡單,32個bit中,必須抽1個bit位用來描述這個數字是正數還是負數。