一铝量、章節(jié)導學
二、進制運算的基礎(chǔ)
1. 進制概述
1.1 進制的定義
- 進位制是一種記數(shù)方式茬末,亦稱進位計數(shù)法或位值計數(shù)法
- 有限種數(shù)字符號來表示無限的數(shù)值
- 使用的數(shù)字符號的數(shù)目稱為這種進位制的基數(shù)或底數(shù)
1.2 常見的進制
n=10 [0-9] 稱為十進制
- 計算機喜歡二進制厂榛,但是二進制表達太長了
- 使用大進制位可以解決這個問題
- 八進制、十六進制滿足2的n次方的要求
1024=0x400=0o2000=0b1000000000
2. 二進制運算的基礎(chǔ)
- 正整數(shù)N丽惭,基數(shù)為r
例1
例2
2.1 (整數(shù))二進制轉(zhuǎn)換十進制:按權(quán)展開法
例1
例2
2.2 (整數(shù))十進制轉(zhuǎn)換二進制:重復相除法
例1
2.3 (小數(shù))二進制轉(zhuǎn)換十進制:按權(quán)展開法
例1
例2
2.4(小數(shù))十進制轉(zhuǎn)換二進制:重復相乘法
例1
三击奶、有符號數(shù)與無符號數(shù)
問:怎么判斷他是數(shù)字位還是符號位呢?
答:使用0表示正數(shù)责掏,使用1表示負數(shù)
1. 原碼表示法
1.1 原碼表示法
- 使用0表示正數(shù)柜砾、1表示負數(shù)
- 規(guī)定符號位位于數(shù)值第一位
- 表達簡單明了,是人類最容易理解的表示法
1.2 原碼表示法的問題
0有兩種表示方法:00换衬、10
原碼進行運算非常復雜痰驱,特別是兩個操作數(shù)符號不同的時候
- 判斷兩個操作數(shù)絕對值大小
- 使用絕對值大的數(shù)減去絕對值小的數(shù)
- 對于符號值,以絕對值大的為準
1.3 希望的改進
- 希望找到不同符號操作數(shù)更加簡單的運算方法
- 希望找到使用正數(shù)代替負數(shù)的方法
- 使用加法操作代替減法操作瞳浦,從而消除減法
四担映、二進制的補碼表示法
1. 補碼的定義
例子1:,叫潦,計算x的二進制原碼和補碼
原碼:蝇完,補碼:
例子2:,計算的二進制原碼和補碼
原碼:诅挑,補碼:
補碼:
例子3:例子3:四敞,計算的二進制原碼和補碼
原碼:泛源,補碼:
補碼:
例子4:拔妥,計算的二進制原碼和補碼
原碼:,補碼:
補碼:
五达箍、二進制的反碼表示法
1. 引進補碼的目的
- 減法運算復雜没龙,希望找到使用正數(shù)替代負數(shù)的方法
- 使用加法代替減法操作,從而消除減法
- 在計算補碼的過程中缎玫,還是使用了減法S蚕恕!
- 反碼的目的是找出原碼和補碼之間的規(guī)律赃磨,消除轉(zhuǎn)換過程中的減法
2. 反碼的定義
例子1:筝家,計算的二進制原碼和反碼
原碼:,反碼:
反碼:
例子2:例子3:邻辉,計算的二進制原碼和反碼
原碼:溪王,反碼:
反碼:
- 負數(shù)的反碼等于原碼除符號位外按位取反
- 負數(shù)的補碼等于反碼+1
例子1:腮鞍,計算x的二進制原碼和反碼和補碼
原碼: 反碼: 補碼:
例子2:潮售,計算x的二進制原碼和反碼和補碼
原碼: 反碼: 補碼:
六潮酒、小數(shù)的補碼
例子1:托修,計算的二進制原碼和反碼和補碼
原碼: 反碼: 補碼:
例子2: 敲董,計算的二進制原碼和反碼和補碼
原碼: 反碼: 補碼:
七瓦糕、定點數(shù)與浮點數(shù)
1. 定點數(shù)的表示方法
-
小數(shù)點固定在某個位置的數(shù)稱之為定點數(shù)
2. 浮點數(shù)的表示方法
2.1 為什么使用浮點數(shù)
- 計算機處理的很大程度上不是純小數(shù)或純整數(shù)
- 數(shù)據(jù)范圍很大种远,定點數(shù)難以表達
2.2 浮點數(shù)的表示方法
浮點數(shù)的表示格式
1.2345:尾數(shù)
10:基數(shù) 11:階碼
S:尾數(shù) r:基數(shù) j:階碼
尾數(shù)規(guī)定使用純小數(shù)
浮點數(shù)的表示范圍
假設(shè)階碼數(shù)值取位蜜徽,尾數(shù)數(shù)值取位
階碼能夠表示的最大值:祝懂,考慮符號位:
尾數(shù)能夠表示的最大值:
尾數(shù)能夠表示的最小值:
尾數(shù)表示范圍: ,考慮符號位:
階碼表示范圍:
尾數(shù)表示范圍:
單精度與雙精度浮點數(shù)
單精度浮點數(shù): 使用4字節(jié)拘鞋、32位來表達浮點數(shù)(float)
雙精度浮點數(shù): 使用8字節(jié)嫂易、64位來表達浮點數(shù)(double)
2.3 浮點數(shù)的規(guī)格化
- 尾數(shù)規(guī)定使用純小數(shù)
- 尾數(shù)最高位必須是1
正確:
錯誤:
錯誤:
錯誤:
例子1:設(shè)浮點數(shù)字長為16位,階碼為5位掐禁,尾數(shù)為11位怜械,將十進制數(shù) 表示為二進制浮點數(shù)。
原碼=反碼=補碼:
浮點數(shù)規(guī)格化:
尾數(shù)為傅事,尾數(shù)符為缕允,階符為,階碼為
例子2:設(shè)浮點數(shù)字長為16位蹭越,階碼為5位障本,尾數(shù)為11位,將十進制數(shù)?54表示為二進制浮點數(shù)响鹃。
原碼:
浮點數(shù)規(guī)格化:
尾數(shù)為驾霜,尾數(shù)符為,階符為买置,階碼為
尾數(shù)反碼粪糙,尾數(shù)補碼
3. 定點數(shù)與浮點數(shù)的對比
- 當定點數(shù)與浮點數(shù)位數(shù)相同時,浮點數(shù)表示的范圍更大
- 當浮點數(shù)尾數(shù)為規(guī)格化數(shù)時忿项,浮點數(shù)的精度更高
- 浮點數(shù)運算包含階碼和尾數(shù)蓉冈,浮點數(shù)的運算更為復雜
- 浮點數(shù)在數(shù)的表示范圍、精度轩触、溢出處理寞酿、編程等方面均優(yōu)于定點數(shù)
- 浮點數(shù)在數(shù)的運算規(guī)則、運算速度脱柱、硬件成本方面不如定點數(shù)
八伐弹、定點數(shù)的加減法運算
數(shù)值位與符號位一同運算,并將符號位產(chǎn)生的進位自然丟掉
溢出判斷榨为,單符號位表示變雙符號位惨好,雙符號位產(chǎn)生的進位丟棄椅邓,結(jié)果的雙符號位不同則表示溢出
1. 整數(shù)加法
例子1:A=-110010, B=001101昧狮,求A+B
例子3:A=-10010000景馁, B=-01010000,求A+B
2. 小數(shù)加法
例子2:A=-0.1010010逗鸣, B=0.0110100合住,求A+B
例子4:A=-10010000, B=-11010000撒璧,求A+B
發(fā)生了溢出
3. 判斷溢出
3.1 雙符號位判斷法
- 單符號位表示變成雙符號位:0=>00,1=>11
- 雙符號位產(chǎn)生的進位丟棄
- 結(jié)果的雙符號位不同則表示溢出
例子4:A=-10010000透葛, B=-11010000,求A+B
雙符號位不同卿樱,表示溢出
例子3:A=-10010000僚害, B=-01010000,求A+B
雙符號位相同繁调,沒有溢出
4. 整數(shù)減法
-B[補]等于B[補]連同符號位按位取反萨蚕,末位加一
B[補] = 1,0010101,(?B)[補] = 0,1101011
例子5:A=11001000蹄胰, B=-00110100岳遥,求A-B
5. 小數(shù)減法
九、讀點書的加減法運算
- 對階
- 尾數(shù)求和
- 尾數(shù)規(guī)格化
- 舍入
- 溢出判斷
1. 對階
対階的目的是使得兩個浮點數(shù)階碼一致裕寨,使得尾數(shù)可以進行運算
- 浮點數(shù)尾數(shù)運算簡單
- 浮點數(shù)位數(shù)實際小數(shù)位與階碼有關(guān)
- 階碼按小階看齊大階的原則
2. 尾數(shù)求和
- 使用補碼進行運算
- 減法運算轉(zhuǎn)化為加法運算:A - B = A + (-B)
3. 尾數(shù)規(guī)格化
- 對補碼進行規(guī)格化需要判斷兩種情況:S>0和S<0(符號位與最高位不一致)
- 如果不滿足此格式浩蓉,需要進行左移,同時階碼相應變化宾袜,以滿足規(guī)格化
(左移)
4. 尾數(shù)規(guī)格化(右移)
- 一般情況下都是左移
- 雙符號位不一致下需要右移(定點運算的溢出情況)
- 右移的話則需要進行舍入操作
4.1 舍入
- “0舍1入”法(二進制的四舍五入)
可能溢出
4.2 溢出判斷
- 定點運算雙符號位不一致為溢出
- 浮點運算尾數(shù)雙符號位不一致不算溢出(因為尾數(shù)雙符號位可以進行右規(guī))
- 浮點運算主要通過階碼的雙符號位判斷是否溢出(如果規(guī)格化后捻艳,階碼雙符號位不一致,則認為是溢出)
例子:认轨,假設(shè)階碼4位,尾數(shù)8位阅悍,計算x + y
5. 浮點數(shù)加減法運算
九好渠、浮點數(shù)的乘除法運算
1. 浮點數(shù)乘法
2. 浮點數(shù)除法
例子:节视,假設(shè)階碼4位,尾數(shù)8位假栓,計算x * y
十寻行、鞏固習題
1.除了十進制以外,這個世界上常見的還有什么進制匾荆?
二進制拌蜘、八進制杆烁、十二進制、二十進制简卧、六十進制兔魂。
2.二進制一般使用什么方法轉(zhuǎn)換成十進制?
整數(shù):按權(quán)展開法举娩。
3.十進制一般使用什么方法轉(zhuǎn)換成二進制析校?
整數(shù):重復相除法,小數(shù):重復相乘法铜涉。\
4.計算機直接使用原碼計算有什么缺點智玻?
0有兩種表示方法,減法運算復雜芙代。
5.請計算12吊奢、124、1023纹烹、-1页滚、-127的二進制原碼。
12(0,00001100)铺呵、124(0,01111100)逻谦、1023(0,1111111111)、-1(1,00000001)陪蜻、-127(1,01111111)邦马。
6.計算機的補碼解決了什么問題?
相比原碼的運算過程(特別是減法)宴卖,補碼對于計算機而言運算更加簡單滋将。
7.請計算12、124症昏、1023随闽、-1、-127的補碼肝谭,并將其使用32位定點表示法和32位浮點表示法(1位符號位掘宪、8位階碼、23位數(shù)值位)表示出來攘烛。
8.你是否可以使用代碼實現(xiàn)一個通用的計算器魏滚,可以將二進制數(shù)轉(zhuǎn)換為十進制數(shù),把十進制數(shù)轉(zhuǎn)換為二進制數(shù)坟漱。
9.計算機為了判斷運算溢出使用了什么方法鼠次?
雙符號位判斷法。當雙符號位不一致表示溢出。
10.什么是溢出腥寇?什么是上溢成翩?什么是下溢?
溢出即計算機無法表示數(shù)值赦役。上溢是指數(shù)值絕對值大于表示范圍麻敌,下溢是指計算機無法提供有效精度表示數(shù)值。
11.對于64位浮點型(double)掂摔,一般都是采用最高位為符號位庸论,次高11位為指數(shù)位,其次52位為尾數(shù)棒呛,試求出double型所能表達的最大值和最小值聂示。
12.浮點數(shù)相比定點數(shù),有什么優(yōu)勢簇秒?有什么不足的地方鱼喉。
浮點數(shù)可以表示更大的數(shù)據(jù)范圍,但是運算耗時更長趋观。
13.浮點數(shù)之間做加減法運算需要幾個步驟扛禽?每個步驟都是必須的嗎?為什么皱坛?
浮點數(shù)加減法需要經(jīng)過以下幾個步驟:對階编曼、尾數(shù)求和、尾數(shù)規(guī)格化剩辟、舍入掐场、溢出判斷。對階是為了使得尾數(shù)可以進行運算贩猎,階碼不一致尾數(shù)運算無效熊户,尾數(shù)規(guī)格化、舍入是為了正確存儲結(jié)果吭服,溢出判斷是為了判斷運算過程是否有誤嚷堡,如果溢出將會發(fā)出信號進行溢出處理。
14.x=0.1101^1001, y=0.1011^110艇棕,請計算x+y的值蝌戒,x-y的值。
x+y=0.11100111001沼琉,x-y=0.10111011001北苟。
15.x=0.1101^111, y=-0.1111^1101,請計算x+y的值刺桃,x-y的值粹淋。
x+y=-0.11101100111101吸祟,x-y=0.11110011011101瑟慈。