計算機内部處理的所有數據都必須是“數字化編碼”了的數據。數字化編碼的過程,就是指對感覺媒體信息進行采樣,将現實世界中的連續信息轉換為計算機中的離散的“樣本”信息,然後對樣本信息用“0”和“1”進行數字化編碼的過程。
在計算機内部,數值數據的表示方法有兩大類:第一類是直接用二進制數表示;另一類是采用二進制的十進制數(BCD)表示。表示一個數值數據需要确定三個要素:進位計數值,定/浮點表示和編碼規則。
3. 進位計數制日常生活中基本上都使用十進制數,其每個數位可用 10 個不同符号 0,1,2……,等表示。但在計算機系統中,常用的進位計數制有:二進制,二進制,十進制,十六進制。
整數部分的轉換方法是“除基取餘,上左下右”。即:用要轉換的十進制整數去除以基數 R,将得到的餘數作為結果數據中各位的數字,直到上商為 0. 上面的餘數作為右邊低位的數位,下面的餘數做為左邊高位上的數位。
小數部分的轉換方法是“乘基取整,上左下右”。即:用要轉換的十進制小數去乘以基數 R,将得到的乘積的整數部分作為結果數據中各位的數字,小數部分繼續與基數 R 相乘,以此類推,直到某一步乘積的小數部分為 0 或已得到希望的位數為止。最後,将上面的整數部分作為左邊高位上的數位,下面的整數部分作為右邊低位上的數位。
4. 定點和浮點表示定點表示小數點位置約定在固定位置的數稱為定點數。頂點表示法用來對定點小數和定點整數進行表示。對于定點小數,其小數點總是固定在數的左邊(浮點數的尾數)。對于定點整數,其小數點總是固定在數的最右邊。
浮點表示小數點位置約定為可浮動的數為浮點數。
對于任意一個實數 X,可以表示為:X=(-1)S * M * RE
其中,S 取值為 0 或 1,用來決定數 X 的符号。M 是一個二進制定點小數,稱為數 X 的尾數;E 是一個二進制定點整數,稱為數 X 的階或指數;R 是基數,可以取值為 2,4,16 等。
在基數 R 一定的情況下,尾數 M 的位數反映數 X 的有效位數,它決定了數的表示精度,有效位數越多,表示精度就越高;階 E 的位數決定數 X 的表示範圍;階 E 的值确定了小數點的位置。
5. 定點數的編碼表示1. 原碼表示一個數的原碼表示由符号位直接跟數值位構成。因此,也稱 “符号-數值” 表示法。原碼表示法中,正數和負數的編碼表示僅符号位不同,數值部分完全相同。
2. 補碼表示正數的補碼符号為0,數值部分是其本身。
負數的補碼等于模與該負數絕對值之差,即符号位為 1,數值部分取反再加一。
補碼采用的是模運算,故絕對值相同的正數和負數相加會等于模 2n。
由于是模運算,絕對值相等的正數和負數關于 2n-1 對稱。越靠經對稱軸的值(不管正數還是負數)都越大。
由于是模運算,補碼表示可以實現加減運算的統一,即用加法來實現減法運算。
計算機中的整數分為無符号整數和帶符号整數。
無符号整數:當一個編碼的所有二進制位都是用來表示數值而沒有符号位時,該編碼表示的就是無符号整數。此時默認數的符号為正(用于表示指針,下标等)。對應的數的值範圍為 0~2n-1
帶符号整數:必須有一個二進制位表示符号。n 位帶符号整數的表示範圍為:-2n-1 ~ 2n-1-1 。
C 語言中允許無符号整數和帶符号整數之間的轉換,轉換前,後的機器數不變,隻是轉換前,後對其的解釋發生了變化。
三. 浮點數的表示浮點數是用一個定點數來表示浮點數的尾數,另一個表示浮點數的階。由于兩個定點數的位數是有限的,因而浮點數的表示範圍也是有限的。 以 32 為浮點數為例:其表示為:
image
1. 非規格化浮點數非規格化數浮點數的偏移量是 2^7(128),即 0 的階碼為 10000000。故階碼能表示的最大數為 127,最小數為 -128。
非規格化數的位數為 24位,表示形式為:0.1bbb……b,其中第一位 1 不明顯表示出來,這樣可以用 23 個數來表示 24 位尾數。
非規格化浮點數的表示範圍:
由上看出,正數和負數的取值範圍關于 0 對稱。
2. 規格化浮點數浮點數尾數的位數決定浮點數的有效數位,有效數位越多,數據的精度越高。為了在浮點數運算過程中盡可能多地保留有效數字的位數,使有效數字盡量占滿尾數數位,必須在運算過程中對浮點數進行規格化操作。
對浮點數進行規格化,除了能得到盡量多的有效數位,還可以使浮點數的表示具有唯一性。
IEEE 754 浮點标準目前幾乎所有計算機都采用 IEEE 754 标準表示浮點數。在這個标準中,提供了兩種浮點格式:32 位單精度格式和 64 位雙精度格式。
其基數隐含為 2,尾數用原碼表示,規格化尾數第一位總為 1,因而可在尾數中缺省第一位的 1,該缺省位稱為隐藏位,隐藏一位後使得單精度格式的 23 位尾數實際表示 24 位有效數字。IEEE 754 規定隐藏位 1 的位置在小數點之前。
IEEE 754 标準中,階碼用移碼表示,偏置常數并不是通常的 2n-1,而是 2n-1-1,因此,單精度和雙精度浮點數的偏置常數分别為 127 和 1023。
偏置常數這樣選取的好處:
偏置常數為127的階碼表示範圍:-126~127。
偏置常數為128的階碼表示範圍:-127~126。
由于IEEE754中規定了非規格化浮點數的階碼為-126,且隐藏位表示0。
故非規格化浮點數表示的範圍為:0~1.11……1*2^(-127)。
能夠覆蓋掉偏置常數為128中的一個子序列。故選擇偏置常數為127。
非規格化數的特點是階碼全為 0,尾數高位有一個或幾個連續的 0,但不全為 0。隐藏位為 0,并且單精度和雙精度浮點數的階分别為 -126 和 -1022,故浮點數的值分别為:(-1)s * 0.f * 2-126 和 (-1)s * 0.f * 2-1022 。
非規格化數可用于處理階碼下溢,使得出現比最小規格數還小的數時程序也能繼續執行。
3. 全 1 階碼全 0 尾數: ∞ / -∞4. 全 1 階碼非 0 尾數:NaN5. 階碼非全 0 且非全 1:規格化非 0 數,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!