生活是一道長長的旅程,充滿了挑戰和困難。然而,我們必須堅持下去,努力前進。無論遇到什么困難,我們都要勇敢面對,永不放棄。只有通過不斷的努力和堅持,我們才能夠取得成功。在這個旅程中,我們可能會失敗,但失敗并不可怕,只要我們愿意從失敗中吸取教訓,不斷改進自己,我們就一定能夠找到成功的道路。成功不是一蹴而就的,它需要我們付出持久的努力和毅力。在困難面前,我們要保持積極的心態,堅信自己的能力,并將困難視為機會去成長和進步。我們要相信自己的潛力和能力,相信未來的美好。只有不停地努力和奮斗,我們才能夠實現自己的夢想,創造屬于自己的輝煌。讓我們一起努力,不斷追求進步,勇往直前,向著成功的目標前進!
計算機組成原理資源網
https://www.wenjingketang.com/這里面有ppt課后習題及答案,需要的可以自行下載
目錄
1.1 數制與編碼
1.1.1 常用的進位計數制及其相互轉換
1.1.2 BCD碼 (Binary-Coded Decimal)
1.1.3 字符與字符串
1.1.4 漢字編碼
1.1.5 校驗碼
1.1.6 真值和機器數
1.1 數制與編碼
1.1.1 常用的進位計數制及其相互轉換
定義: 進位計數制是表示數值的一種方法,每個數字的位置決定了它的權重。常用的進位計數制包括:
- 二進制(Binary):?只有0和1兩個數字,基數為2。
- 八進制(Octal):?使用0到7八個數字,基數為8。
- 十進制(Decimal):?我們日常生活中最常用的計數系統,使用0到9十個數字,基數為10。
- 十六進制(Hexadecimal):?使用0到9和A到F共十六個符號,其中A到F分別代表10到15,基數為16。
相互轉換:
-
十進制轉其他進制: 以轉換為二進制為例,通過除基取余法進行轉換。例如,將十進制數42轉換為二進制:
- 42 ÷ 2 = 21...0
- 21 ÷ 2 = 10...1
- 10 ÷ 2 = 5...0
- 5 ÷ 2 = 2...1
- 2 ÷ 2 = 1...0
- 1 ÷ 2 = 0...1
- 結果為
101010
,從下往上讀取余數。
-
其他進制轉十進制: 使用按權展開求和法。例如,將二進制數
101010
轉換為十進制:- 1×25+0×24+1×23+0×22+1×21+0×20=32+0+8+0+2+0=421×25+0×24+1×23+0×22+1×21+0×20=32+0+8+0+2+0=42
-
二進制與八進制/十六進制之間的轉換: 直接分組轉換。因為8 = 2^3,所以每三位二進制數可以轉換成一位八進制數;同樣地,由于16 = 2^4,每四位二進制數可以轉換成一位十六進制數。例如,將二進制數
101010
轉換為八進制:101 010
?→?52
- 將二進制數
101010
轉換為十六進制: 0010 1010
?→?2A
1.1.2 BCD碼 (Binary-Coded Decimal)
定義: BCD碼是一種特殊的二進制編碼方式,用來表示十進制數。每一位十進制數用4位二進制數表示(0000到1001),因此一個字節可以表示兩位十進制數。
例子:
- 十進制數56在BCD碼中表示為
0101 0110
。
特點:
- 直觀易懂,便于人們閱讀和理解。
- 在某些應用場景下(如金融計算)避免了二進制浮點運算帶來的精度損失。
1.1.3 字符與字符串
字符編碼:
- 計算機內部使用特定的編碼方案來表示字符。最常用的是ASCII(American Standard Code for Information Interchange)和Unicode標準。
- ASCII:?使用7位或8位二進制數表示128或256個不同的字符,包括字母、數字、標點符號等。例如,字母'A'在ASCII中的編碼是
01000001
。 - Unicode:?支持更多的字符集,特別是非拉丁文字符,如中文、日文等。UTF-8是變長編碼,對于ASCII字符占用1個字節,而對于其他字符(如漢字)則可能需要2到4個字節。
- ASCII:?使用7位或8位二進制數表示128或256個不同的字符,包括字母、數字、標點符號等。例如,字母'A'在ASCII中的編碼是
字符串:
- 字符串是由多個字符組成的序列。例如,在Python中,字符串可以用引號括起來表示:
s = "Hello, World!"
1.1.4 漢字編碼
定義: 漢字編碼是指如何用計算機可以識別的方式表示漢字。早期有GB2312、GBK等編碼標準,現在普遍采用UTF-8、UTF-16等更通用的Unicode編碼。
例子:
- UTF-8編碼下的“你好”:
- “你”的UTF-8編碼可能是
E4 BD A0
(具體取決于實現)。 - “好”的UTF-8編碼可能是
E5 A5 BD
。
- “你”的UTF-8編碼可能是
特點:
- UTF-8是變長編碼,對于ASCII字符占用1個字節,而對于其他字符(如漢字)則可能需要2到4個字節。
- 它兼容ASCII,同時能夠表示全世界幾乎所有語言的文字。
1.1.5 校驗碼
定義: 校驗碼是為了檢測傳輸錯誤而附加的數據。它可以是奇偶校驗、循環冗余校驗(CRC)等形式。
應用:
- 在數據通信中,發送端會根據一定規則生成校驗碼并附帶在數據后面一起發送;接收端收到數據后重新計算校驗碼并與接收到的進行對比,如果不一致則說明數據可能出錯。
例子:
- 奇偶校驗:?如果使用偶校驗,那么所有有效位加上校驗位應該包含偶數個1。例如,數據
1010
(有兩個1)加上偶校驗位后變為10100
(仍然是兩個1)。 - 循環冗余校驗(CRC):?CRC是一種更為復雜的校驗方法,它基于多項式除法原理,能提供更高的檢錯能力。例如,Ethernet幀尾部的FCS字段就是通過CRC算法計算出來的。
1.1.6 真值和機器數
真值: 真值是指實際存在的數值,即我們在日常生活和數學中使用的數字,可以是正數、負數或零。
機器數: 機器數是計算機內部用來表示數值的形式,采用二進制表示法。由于計算機硬件基于二進制邏輯工作,所有數據必須以機器數形式存儲和處理。
- 無符號數:?只能表示非負數,每一位都用于表示數值大小,沒有專門的符號位。
- 有符號數:?可以表示正數和負數,最高位通常作為符號位,0 表示正數,1 表示負數。
- 原碼:?符號位加上絕對值的二進制表示。例如,8位二進制中的+5為
00000101
,-5為10000101
。 - 反碼:?正數的反碼等于其原碼;負數的反碼是在原碼基礎上,除了符號位外,其余各位取反。例如,-5的反碼為
11111010
。 - 補碼:?是最常用的表示方式。正數的補碼等于其原碼;負數的補碼是在其反碼的基礎上加1。例如,-5的補碼為
11111011
。
- 原碼:?符號位加上絕對值的二進制表示。例如,8位二進制中的+5為
計算示例:
- 從真值到機器數(補碼)的轉換:
- 轉換十進制數-5為8位二進制補碼:
- 先將5轉換為二進制:
00000101
- 對這個二進制數取反:
11111010
- 加1:
11111011
- 先將5轉換為二進制:
- 轉換十進制數-5為8位二進制補碼:
- 從機器數(補碼)到真值的轉換:
- 解釋8位二進制補碼
11111011
:- 檢查符號位,最高位是1,說明這是一個負數。
- 減1后對剩余部分取反:
11111010
?->?00000101
- 將結果轉換回十進制,并加上負號:-5
- 解釋8位二進制補碼
總結: 數制與編碼的知識覆蓋了計算機內部數據表示的核心概念,從不同進位計數制之間的轉換到具體的編碼方式,再到確保數據完整性的校驗機制,都是理解和設計高效計算機系統的關鍵要素。