日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机中的数(一):数在计算机中的表示

發(fā)布時間:2023/11/30 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机中的数(一):数在计算机中的表示 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考資料:

唐朔飛《計算機組成原理》高等教育出版社 張代遠《計算機組成原理教程 第二版》清華大學出版社 另一個視角解讀計算機編碼-補碼編碼 補碼初探 為何將移碼作為浮點數(shù)的階碼》 ? 補碼和移碼存在的意義》? 數(shù)值數(shù)據(jù)在機內(nèi)的表示》?
定點和浮點 定點格式 所謂定點格式,即約定機器中所有數(shù)據(jù)的小數(shù)點位置是固定不變的。在計算機中通常采用兩種簡單的約定:約定小數(shù)點的位置固定在數(shù)據(jù)的最高位之前,稱為定點小數(shù),或者約定小數(shù)點固定在最低位之后,稱為定點整數(shù)。定點小數(shù)是純小數(shù),定點整數(shù)是純整數(shù)。 當數(shù)據(jù)小于定點數(shù)能表示的最小值時,計算機將它們作0處理,稱為下溢;大于定點數(shù)能表示的最大值時,計算機將無法表示,稱為上溢,上溢和下溢統(tǒng)稱為溢出。 當然,小數(shù)點放在哪兒,這純粹是一種約定。我們也可以約定小數(shù)點在中間的某個位,比如8位字長的機器,我們約定小數(shù)點在正中間,即我們可以將一個8位二進制數(shù) xxxx xxxx 解讀為:xxxx.xxxx。這種方法克服了“定點小數(shù)”和“定點整數(shù)”只能表示純小數(shù)或純整數(shù)的不足,可以表示一個既含整數(shù)部分,又含小數(shù)部分的數(shù),但這種表示形式有諸多壞處,比如當要表示的數(shù)是一個純小數(shù)且“很小”時,則這個數(shù)的大部分位都被0占據(jù),浪費了資源,精度也不高,由此,我們引入了“浮點格式”,正如“科學計數(shù)法”所帶來的好處那樣,本來很大或很小的數(shù)都是要寫的很長很長,現(xiàn)在可以用不多的幾位數(shù)來表示那些很大或很小的數(shù)了,比如0.00000001可以寫成0.1×2^(-7)。 浮點格式: 在機器中的一個浮點數(shù)包括尾數(shù)階碼兩部分,尾數(shù)用純小數(shù)形式(定點小數(shù))表示,階碼用純整數(shù)(定點整數(shù))形式表示。尾數(shù)部分給出有效數(shù)字的位數(shù),因而決定了浮點數(shù)的表示精度。階碼指明小數(shù)點在數(shù)據(jù)中的位置,因而決定了浮點數(shù)的表示范圍。尾數(shù)和階碼各需要一個符號位。


在未統(tǒng)一約定的情況下,浮點數(shù)的表示形式不唯一。例如:11.01 也可以表示成 0.01101×2^3 或 0.1101×2^2 等等。 在兩種情況下機器將浮點數(shù)視為0,稱為機器零 1.不論階碼為何值,只要浮點數(shù)的尾數(shù)為0
2.無論尾數(shù)為何值,只要階碼的值比所能表示的最小值還要小 為了提高數(shù)據(jù)的表示精度,當尾數(shù)的值不為0時,其尾數(shù)域的最高有效位應為1,否則要進行“規(guī)格化”,即修改階碼同時移動小數(shù)點,使浮點數(shù)的形式改變,值保持不變。 IEEE754
IEEE754是目前最受認可流傳最為廣泛的浮點數(shù)標準。 該標準定義了兩種格式(雙精度和單精度)的浮點數(shù)。 該標準還定義了雙精度和單精度浮點數(shù)的擴展格式(也稱“中間格式”)。 擴展格式包括: 為階碼分配更多的位(擴展表示范圍) 為尾數(shù)分配更多的位(擴展數(shù)的精度) 擴展格式在計算過程中被使用,由于其精度和范圍被擴大了,所以能夠達到比要求精度更高的精度,然后再對這個中間結果進行取舍,得到最終結果。這樣能使計算過程中精度盡可能高。 單精度格式 長度為32位 1位符號位 | 8為階碼 | 23位尾數(shù) 雙精度格式 長度為64位 1位符號位 | 11位階碼 | 52位尾數(shù) 注意事項:拿單精度格式來說,雙精度格式以此類推 1)"符號位"表示的是數(shù)本身的正負,至于指數(shù)的正負,則在8位階碼里邊已包含了。 2)階碼用移碼表示 3)尾數(shù)用原碼表示。 4)尾數(shù)要統(tǒng)一規(guī)格化成1.xxxxxx的格式,既然所有的尾數(shù)都是這個格式,那么前邊的1就不用存入計算機了,只存儲后邊的xxxxx就行了。所以,雖然只給尾數(shù)分配了23位,但實際上表示的數(shù)是24位的。 看一個例子就明白了。 關于IEEE754的一個例子(2011年全國研究生入學計算機統(tǒng)考真題) 問題: float型數(shù)通常用IEEE754單精度浮點數(shù)格式表示,若編譯器將float型變量x分配在一個32位浮點寄存器R中,其中x=-8.25,請問R中的內(nèi)容是什么? 解答: 將-8.25轉換成2進制,為-1000.01B 將該數(shù)規(guī)格化,為?-1.00001×23 回想單精度的格式:1位符號位 | 8為階碼 | 23位尾數(shù),依次填入符號位、階碼、尾數(shù)就好了。 顯然符號位為1,表示負數(shù)。 階為“3次方”,所以階碼為“3的移碼”,先求出3的移碼 IEEE754規(guī)定,單精度數(shù)的階碼偏置值為127,所以3的移碼為127+3=130 所以階碼部分的8位應該是130這個十進制數(shù)的原碼,即1000 0010 尾數(shù)為1.00001,去掉前邊的1,就是00001, 所以尾數(shù)部分的23位就是: 0000 1000 0000 0000 0000 000 將這三部分拼接起來,得到最終R里邊存放的內(nèi)容為:1100 0001 0000 0100 0000 0000 0000 0000, 寫成16進制為C1040000H 定點和浮點的對比 定點浮點各有優(yōu)劣,定點運算快,但表示范圍沒有浮點大,精度沒有浮點高。 一般來說,通用的大型機大多采用浮點數(shù),或同時采用浮點、定點數(shù)。小型、微型機、控制機等一般采用定點數(shù),當需要進行浮點運算時,可通過軟件實現(xiàn),也可以外加一個浮點協(xié)處理器來實現(xiàn)浮點運算。 注意,以下內(nèi)容中,為了敘述方便我們約定,“機器字長為n+1位,1位表示負號,剩余n位表示數(shù)值”,凡是涉及到“取值范圍”,“如何取?!钡葐栴},其中的n的意義皆遵從這個約定。
真值和機器碼 真值:平時手寫出來的數(shù),5、-3之類的, 機器碼:真值在計算機里邊的格式,將符號和數(shù)值一起編碼。 機器數(shù)分為無符號數(shù)和有符號數(shù)。 無符號數(shù):所有的位全部用來表示數(shù)本身 有符號數(shù):機器數(shù)中的某些位用來表示數(shù)的符號,其他的位用來表示數(shù)值本身。 有符號數(shù)的整數(shù)的表示方式有四種:原碼、反碼、補碼、移碼 有符號數(shù)小數(shù)表示是尾數(shù)和階碼寫在一起,其本質(zhì)上還是整數(shù)。 原碼和反碼的0都有兩種表示形式,正0和負0,所以原碼和反碼的表示范圍都是一個關于0對稱的閉區(qū)間。
原碼: 寫原碼時注意寫符號位,特別是正數(shù),不要把符號位0給丟了 正數(shù)原碼就是化成二進制后在前邊加0 負數(shù)原碼就是化成二進制后在前邊加1 取值范圍 純小數(shù)時: 當符號位為0,數(shù)值位全為1時取到最大值:由等比數(shù)列求和公式知,最大值為2-1+2-2+…+2-n=1-2-n 當符號位為1,數(shù)值位全為1時取到最小值:同樣地,最小值為2-n-1 純整數(shù)時: 同樣有等比數(shù)列求和公式知,取值范圍為:-(2n-1)≤x≤2n-1 反碼: 本身沒啥用,就是由原碼求補碼的一種中間過渡產(chǎn)物。 保持原碼符號位不變,其余各位取反 取值范圍 和原碼的取值范圍完全一樣,無非原碼是符號位為0,其余位皆為1時取到最大值,而反碼是符號位為1,其余位皆為0時取到最大值。形式不同,實質(zhì)完全一樣。 補碼: 定義: 正數(shù)的補碼就是它的原碼 負數(shù)的補碼是它的模減去它的絕對值,或說是它本身加上它的模 求補碼的模: 給你一個補碼形式的數(shù),讓你求它的模,就把符號位往前進一位,這一位的值就是它的模。 想象一下,一個n+1位字長的機器,1位符號位,n位數(shù)值位,當運算結果使得符號位產(chǎn)生向上一位的進位時,這個進位由于硬件的限制而自然被舍掉了,那么這被舍掉的一位的值,就是模。 純小數(shù)的模為2,n位整數(shù)的模為2^(n+1) 補碼的取值范圍問題(以8位字長為例) 關于這個問題詳情參考《另一個視角解讀計算機編碼-補碼編碼》,看唐朔飛組成原理P225下邊那個表,應該更能明白所謂“在一個環(huán)上編碼”。 先討論純整數(shù)。首先將0編碼為0000 0000,然后將1編碼為0000 0001,那么為了使-1+1=0成立,就應該把-1編碼為1111 1111,而根據(jù)-2+1=-1,可知應該把-2編碼為1111 1110,想象在一個環(huán)上,由0000 0000開始,往左是減小,往右是增大,往左走盡頭是1000 0000,再減符號位就要變了,就要跨入環(huán)的另一半,進入正數(shù)的范圍內(nèi)了,這個1000 0000就是補碼能夠取到的最小值,其真值為-128。 這里我們并非通過“符號位寫‘-’,剩余各位取反,末位加1”這種方法算出補碼1000 0000所對應的真值為-128的 不信我們用這種方法來做一下,1000 0000的符號位寫‘-’剩余各位為000 0000,取反之后為111 1111,加1之后變成000 0000,得到的真值是-0000000,最高位溢出了,這種算法在這里行不通。 我們之所以說補碼1000 0000對應的真值是-128,那是因為從上邊所述的“考察編碼的角度”,由“將0編碼成0000 0000”而一步步推演至全局,推演到-127時,將-127編碼為1000 0001,而繼續(xù)減小,就變成了-128,于是將-128編碼為1000 0000。這里將1000 0000與-128對應起來,只是一種編碼的方式,是一種強行規(guī)定的映射罷了,因為1000 0000是一個交界處,再往左走,就走到了0111 1111,進入了正半環(huán)了。在原碼和反碼的編碼方式中,我們把交界處編碼為0,即1000 0000和0000 0000 皆是0的編碼,在補碼中,我們覺得沒必要將0編成兩個不同的編碼,所以就把在原碼中賦予0的兩個編碼中的一個解放出來,放在負數(shù)的最左端了。然而須知這個最左端的數(shù),并不能用“各位取反、末位加1”來算,而只能先算出它的鄰居-127,然后再推一步得到-128。 求補碼能取到的最大值是很容易的,正如原碼最大值那樣,取0111 1111就是最大值。 純小數(shù)的補碼也是一樣。最小值為1000 0000,對應-1。最大值為0111 1111。 使用補碼帶來的好處: 1.使符號位能與有效值部分一起參加運算,從而簡化運算規(guī)則 2.使減法運算轉換為加法運算,簡化計算機中運算器的線路設計 一些性質(zhì) 兩個互為補數(shù)的數(shù),它們的絕對值之和等于模。 -1不屬于小數(shù)的范圍,但在小數(shù)的補碼中,卻有-1存在。 移碼: 兩種定義方式: 一:對于某一個系列或集合的數(shù),把它們都映射到數(shù)軸的正半軸上去,使得所有的數(shù)都不為負數(shù),并且這種映射保持他們在數(shù)軸上的相對位置不變,即若x的真值大于y的真值,則x的移碼一定大于y的移碼。這種映射的數(shù)學表示為:[x]=x+2n?.(這里的?[x]=x+2n??并非硬性規(guī)定,而是一般的習慣,比如IEEE754就沒有遵循這個習慣,IEEE754在單精度情況下就取的是x+127,在雙精度情況下就取的是x+1023。要注意只有在取?[x]=x+2n?的情況下,“移碼就是補碼的符號位取反”這一規(guī)律才成立)。 二:移碼就是將補碼的符號位取反。 移碼所帶來的好處: 1.方便比較大小 由于所有的數(shù)在經(jīng)過映射之后皆不為負且相對大小不變,所以可直接將移碼當做無符號數(shù),一眼看出兩個數(shù)誰大誰小。若是用補碼,則比較起大小就挺麻煩了。 2.使機器零為全0。 移碼的最小值為全0,而“階碼小于機器所能表達的最小值(即階碼部分為全0)”是機器零的一種。 移碼的一些性質(zhì) 當移碼的各位都為0時,該移碼對應的數(shù)據(jù)是所有能夠表示的數(shù)據(jù)中的最小值。當移碼各位都是1時,是其所能表示的最大值 移碼的用途 浮點數(shù)的階碼是用移碼表示的。原因如下: 1.方便比較大小和對階。 2.用移碼來表示階碼的話可以提高表示數(shù)據(jù)的精度。 如果不采用移碼來表示階碼,那么階碼就會出現(xiàn)負值,當需要把該數(shù)據(jù)轉換成非階碼浮點數(shù)據(jù)時我們就需要對尾數(shù)進行左移(做乘法運算),這樣的話最先移去的是尾數(shù)的高位,而高位的丟失是嚴重影響精確度的。若用移碼表示階碼,則我們在轉換時總是做右移操作,這樣最先移去的是最低位,比較好地保持了數(shù)據(jù)的精度。 最后,四種編碼的總結: 真值和補碼的互推 由真值求補碼:原碼除符號位外,每位取反,末位加1 由補碼求真值:將符號位寫為負號“-”,其余各位按位取反,末位加1 注意,這兩種互推法,按位取反的時候都是不帶符號位的 注意:這種互推法很實用,但不適用于補碼所能表示的最小的那個數(shù),比如四位情況下,[-8]=1000,就不能用上述方法互推。 原碼、反碼、補碼當x為正數(shù)時,是一樣的 真正具有深刻內(nèi)涵的實用價值的是補碼,所以最好清楚補碼的數(shù)學定義機器內(nèi)涵,明白補碼的“?!钡淖饔?#xff0c;至于原碼、反碼的數(shù)學定義形式,什么?[x]=1-x?之類的,個人認為全是為了湊個形式完整,沒有必要做詳細了解,只要能做到給出一個x,會求出其原碼和反碼就行了。 應用場合: 原碼:IEEE754 浮點數(shù)用原碼表示尾碼 反碼:求補的過程中要先求反再加一,反碼就是這個過程的中間產(chǎn)物 補碼:運算時候用補碼運算 移碼:浮點數(shù)的階碼用移碼表示 取值范圍 原碼和反碼的取值范圍相同 補碼的取值范圍在原碼范圍的基礎上多往左(負方向)走了一位 移碼的范圍和補碼一樣。

轉載于:https://www.cnblogs.com/ybwang/archive/2011/10/24/2222206.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的计算机中的数(一):数在计算机中的表示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。