第2節 C語言之數和數制 進製轉換

2021-07-28 12:53:18 字數 3952 閱讀 7094

計算機儲存的資料

音訊---->*.***  *m4a  *.wma

他們都是以特殊的編碼格式存在計算機中的。

例如 :*.*** 格式 也是一種 音訊壓縮技術。mp4特殊中的壓縮格式(高畫質的格式)。

數值資料

10進製數,特點逢10進1。10進製數 是我們人類交流的時候用的。

計算機處理這些資料 100,10,15等這些10進製資料的對應的2進製數。

計算機語言 叫機器語言是二進位制的。

二進位制的數是由 0 和1 兩個數字組成,特點逢二進一。

計算機想要表示是乙個二進位制   0000 0101(2)

10進製的整數 ------>2進製的數

例如:10 這個轉換成2進製數。

2.1 輾轉相除法

輾轉相除法求乙個10進製數的2進製,迴圈對2取餘數,直到商為0,逆序輸出 餘數。

例如:10/2        商 5     餘 0

5/2         商 2     餘  1

2/2         商 1      餘  0

1/2          商0      餘  1 

這個數的二進位制數 就是  餘數逆序輸出0000 1010(2)

練習:求以下10進製數的對應的二進位制的數。

32  ---->0010 0000(2)         2^5

8    ---->0000  1000(2)         2^3

64  

50第二種計算10進製數的2進製數(口算  200以內的二進位制數)

二進位制數   0000  1010(2)

2---->叫做基數   

從左到右  叫做 由高位到低位。每乙個2進製位上的數 都對應乙個位的位權。位權就表示這一位2進製數對應的2的幾次方。

最右邊的這一位:2^0 = 1;

右邊的第二位:2^1 = 2;

2進製數----->10進製數  

0000 1010 = 0*2^0 + 1*2^1+0*2^2+1*2^3 = 0+2+0+8 = 10

快速計算2進製數的方法(200以內)

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

256  128  64   32   16    8     4      2    1

130   0       1     0      0    0     0    0       1     0

10     0       0    0      0    0     1      0      1     0

32    0       0    0      1     0     0     0      0    0

127   0       0    1       1     1      1       1       1     1

110    0       0    1      1      0     1       1       1    0

98進製數 是由0~7共8個數字組成的,逢八進一。

一般我們表示乙個數的8進製  0開頭  如  0123  或者  123(8)

輾轉相除法  迴圈對8取餘數,直到商為0,逆序輸出餘數。

16進製制數 是由0~9共10個數字 以及字母a~f,組成的一  個逢十六進一的數字。

一般表示格式為:0x00f423c04或0x00f423c04或

00f423c04(16)

通常 我們表示記憶體位址時使用。

1>把10進製整數----->16進製制整數

輾轉相除法,迴圈對16取餘數,直到商為0,逆序輸出。

0~9   a = 10   b=11  c=12  d=13 e=14  f=15 

例如:65這個數的16進製制數

65/16      商4        餘  1

4/16        商0        餘 4

用:0x開頭表示這個數  0x41

2>把16進製制整數----->10進製的整數

16^2   16^1   16^0

0       4       1

計算結果 = 1*16^0 + 4*16^1 = 1 + 64 = 65

練習:計算以下10進製整型的2進製 和 16進製制數分別是多少

99   85    14    56    80   77     150    126     101     

99----> 0110 0011(2)

0x63

85---->0101 0101(2)

0x55

14----->0000 1110(2)

0xe56----->0011 1000(2)

0x38

80----->0101 0000(2)

0x50

77----->0100 1101(2)    

0x4d

150---->1001 0110(2)

0x96   

126----> 0111 1110(2)

0x7e    

101----->0110 0101(2)

0x65

數在計算機中儲存,不光只能儲存一些正數,還有負數。在計算中 負數是通過這個數的二進位制數的 符號位來表示

的。乙個二進位制數的最高位 為符號位。來表示+ -,如果該位上的數為0 就表示這個乙個正整數,如果該位上的數

為1 就表示這個數是乙個負整數。 

數值有正負之分,整數是怎麼樣儲存在計算中的,乙個數的最高位為符號位,表示正負,這就是機器數(2進製)的原始碼。假設計算機的cpu**處理器能夠處理的位數 8位 ,就是乙個位元組1byte =  8bit,那麼原始碼能表示的數值的範圍就是

從-128  ~  0~ 127  共 256個

有了數值的表示方法 就可以進行對數字的算術運算。(+ -  

* /),但是很快就能發現乙個問題,就是帶符號位的原始碼進行乘法 或 除法運算時結果是正確的,但是加法 和 減法的運算有時候可能會出現問題。

整數都是以它的補碼的形式存在我們計算機中的。

原始碼      反碼      補碼

+  原始碼反碼補碼都相同,就是這個數的2進製數。

-  負數的原始碼 = 先取絕對值以後 得到的這個正數的2進製數的值,然後再把最高位置成 1 。

負數的反碼 = 這個數的原始碼保持符號位不變,其餘的每乙個2進製位上的數都取反(除了符號位以外  0->1  1->0)

負數的補碼  負數的補碼就是在原始碼的反碼的基礎上+1。

補碼的設計目的:(負數 四則運算用的)

1.使符號位能夠與有效的值的部分一起來參與運算(+),從而簡化運算的規則。(印度人發明的)

2.使得減法運算 轉化為 加法運算。

(這些的轉換都是在計算機的最底層來實現的)。

-5 這個數的原始碼

第一步 :|-5| = 5    這個數的2進製數 0000 0101   

第二步 :把最高位置成符號位   1000 0101(2)

練習:-28 這個數的原始碼是多少?

第一步:|-28| = 28   0001 1100(2)

第二步:1001 1100(2)  表示了-28的原始碼

-5 這個數的反碼

第一步 :|-5| = 5    這個數的2進製數 0000 0101   

第二步 :把最高位置成符號位   1000 0101(2)   原始碼

在原始碼的基礎上  保持符號位不變

1000 0101(2)   原始碼  或1000 0101b

1111 1010(2)    反碼    ---->除了符號位 以外的其它的位上的數

練習:-28 這個數的反碼是多少?

第一步:|-28| = 28   0001 1100(2)

第二步:1001 1100(2)  表示了-28的原始碼

1110  0011(2) 或 1110 0011b 反碼

c 數制2 16數進製的轉換

通項公式 while n 0 其中n為要轉換的十進位制的數。d為要轉換的數制,如二進位制為2.include using namespace std intmain while i cout cout return0 缺點 因為陣列a存放的是數字,上述 只能轉換小於10的數制。在16進製制下,其實當...

C語言之指標和陣列 2

字元指標和函式 該節主要介紹字串陣列的指標,即關於字串處理的函式的指標。1 當字串出現在程式中時,例如 printf hello,world 是通過字元指標獲取到它,printf函式接收到乙個字元陣列開始的位址,也就是說,字串常量是通過指向它的首元素的指標獲取到的。2 字串常量沒有必要必須作為函式的...

c語言之進製轉換(棧實現)

從上兩篇部落格中我們可以知道,棧具有後進先出的特性,而進製轉換的列印輸出剛好與計算過程相反,滿足棧這後進先出的特性,所以可以用棧很快的實現進製轉換,下面是用棧實現進製轉換的c函式 void conversion sqstack pstack,unsigned int n,const unsigned...