1. 程式人生 > >計算系統基礎-第二章資料的表示和儲存-總結

計算系統基礎-第二章資料的表示和儲存-總結

                      一數制和編碼

(1)“轉換”的概念在資料表示中的反映

 

 

 

 

(2)資訊的二進位制編碼

 

(3)數值資料的表示

 

(4)十進位制(Decimal)計數制

 

 

(5)二進位制(Binary)計數制

 

(6)R進位計數制

 

(7)十進位制數與R進位制數之間的轉換

(8)十進位制數與二進位制數之間的轉換

 

(9)十進位制數與8進位制數之間的轉換

(10)定點數和浮點數

 

 

 

二c語言中的整數

(1)在計算機內部數值一律使用補碼儲存。正數的補碼與原碼一致,負數的補碼是符號位為1,其餘位是該負數的絕對值按位取反後加1得到。

 

-1和-2在記憶體是如何儲存的呢?

負數在記憶體中就是以補碼形式存在的.

十進位制 原碼 反碼 補碼

 

-1 10000 0001 1111 1110 1111 1111(-1的補碼0xff)

 

-2 10000 0010 1111 1101 1111 1110(-2的補碼0xfe)

 

有符號整數,二進位制的最高位表示正負,不表示數值,最高位為0時表示正數,為1時表示負數

signed char 1B –128 到 127 (-2^7 - 2^7-1)

0 111 1111 0表示整數故最大值2^7 -1 2^7(1000 0000)

為什麼是-128?

關鍵在於signed char或者說char資料型別不論有無符號,在C/C++語言中佔用的記憶體的空間均為1B,也就是8bit,​是可以用1000 0000表示-128的,它是把最高位符號位丟棄了,截斷後的-128的補碼和原碼一致,這裡不知道大家有沒有發現-0和這個-128的原碼看起來的有點眼熟的意思。 沒錯,-0(1000 0000)和-128(1000 0000)原碼相同,也就說1000 0000和-128丟棄最高位後餘下的8位相同,所以-0也可以也可以用來表示-128.   這樣子,截斷後的-128和char型範圍其他數 (-127~127)運算也不會影響結果,所以才敢這麼表示-128. 

 

char a=-128; //原碼(1 1000 0000)-->反碼(1 1000 0000)在記憶體中以補碼1 1000 0000 儲存,但由於是char ,所以只儲存 1000 0000,最高位丟棄

 

char a=-129; //原碼(1 1000 0001)-->反碼(1 0111 1111)在記憶體中以補碼為1 0111 1111 只取後八位儲存,即 0111 111 這個值剛好是127了,同理-130 截斷後為126.....

printf("%d",a) ;會輸入多少?結果為127(0111 1111)

 

 

unsigned char 1B 0 到 255 (0 - 2^8-1) -----> 0000 0000 -- 1111 1111(2^8 - 1) 2^8 (1 0000 0000)

 

0: 0000 0000 0000 0000 0000 0000

 

-0: 1 0000 0000 ->(取反) 1 1111 1111 ->(加1) 1 0000 0000

-1: 1 000 0001 ->(取反) 1 111 1110 ->(加1) 1111 1111

-2: 1 000 0010 ->(取反) 1 111 1101 ->(加1) 1111 1110

-3: 1 000 0011 ->(取反) 1 111 1100 ->(加1) 1111 1101

 

… …

 

-127 1 111 1111 ->(取反) 1 000 0000 ->(加1) 100 00001

-128 1 1000 0000 ->(取反) 1 0111 1111 ->(加1) 1000 0000

-129 1 1000 0001 ->(取反) 1 0111 1110 ->(加1) 0111 1111

 

 

三浮點數的編碼表示

 

 

 

四資料寬度和儲存容量的單位

(1)資料的基本寬度

位元(bit,位)是計算機中處理、儲存、傳輸資訊的最小單位

• 二進位制資訊最基本的計量單位是“位元組”(Byte) –現代計算機中,儲存器按位元組編址–位元組是最小可定址單位 (addressable unit ) –如果以位元組為一個排列單位,則LSB表示最低有效位元組,MSB表示最高有效位元組

• 除位元(位)和位元組外,還經常使用“字”(word) 作為單位

–“字”和 “字長”的概念不同

IA-32中的“字”有多少位? 字長多少位呢?

DWORD :32位

QWORD:64位

 

 

“字”和 “字長”的概念不同

–“字長”指資料通路的寬度。

”字長”等於CPU內部匯流排的寬度、運算器的位數、通用暫存器的寬度(這些部件的寬度都是一樣的)

–“字”表示被處理資訊的單位,用來度量資料型別的寬度

 

–字和字長的寬度可以一樣,也可不同

例1:對於x86體系結構,不管字長多少,定義“字”的寬度都為16位,而從i386體系開始字長就是32位了。

例2:對於MIPS 32體系結構,其字和字長都是32位。

 

 

 

資料量的度量單位

• 儲存二進位制資訊時的度量單位要比位元組或字大得多

• 容量經常使用的單位有:

– “千位元組”(KB),1KB=210位元組=1024B

– “兆位元組”(MB),1MB=220位元組=1024KB

– “千兆位元組”(GB),1GB=230位元組=1024MB

– “兆兆位元組”(TB),1TB=240位元組=1024GB

• 通訊中的頻寬使用的單位有:

– “千位元/秒”(kb/s),1kbps=10^3b/s=1000 bps – “兆位元/秒”(Mb/s),1Mbps=10^6 b/s =1000 kbps – “千兆位元/秒”(Gb/s),1Gbps=10^9 b/s =1000 Mbps – “兆兆位元/秒”(Tb/s),1Tbps=10^12 b/s =1000 Gbps

如果把b換成B,則表示位元組而不是位元(位)例如,10MBps表示 10兆位元組/秒

 

程式中資料型別的寬度

 

 

五資料儲存時的位元組排列

 

 

檢測系統的位元組順序

 

大端/小端方式舉例