1. 程式人生 > >補碼錶示的浮點數的規格化及示數範圍

補碼錶示的浮點數的規格化及示數範圍

一、規格化

對二進位制浮點數N = m x rm ^ e(rm為尾數的基),若尾數m滿足1/2≤|m|<1,即尾數最高位數字為“1”,則為規格化的數。

補碼來說:如果是正數,尾數的最高位為“1”;如果是負數,尾數的最高位應為“0”(即1.0x...x),或為“1”而以後各位全為“0”(即1.10...0)。前者小於-1/2,後者正好等於-1/2。

為了機器判斷方便,在補碼錶示中,往往不把-1/2列入規格化的數。這樣,補碼規格化數規定如下:

對正數m ≥ 0,如果 1 > m ≥ 1/2,稱為規格化數,其補碼錶示形式為:0.1x...x ;對負數x<0,如果 -1/2> m ≥ -1(注意:補碼錶示的時候可取-1),稱為規格化數,其補碼錶示形式為:1.0x...x。 其中x表示可任取“0”或“1”。

因此,機器只要判斷運算結果的符號位與第一位數字是否相同,便可知道是否是規格化的數。

二、示數範圍

1個浮點數需要用以下6個引數來表示:

* 尾數的基rm。在不同的數制中,可以分別取值為 rm = 2、4、8、16、10。

* 尾數的值m。

* 尾數的長度p。p的值與尾數採用的基rm有關,p位長的尾數的rm進位制數的尾數為p' = p / [ log2(rm) ]。

* 階碼的基re。一般取re = 2。

* 階碼的值e。

* 階碼的長度q。由於re = 2,因此q的值就是e的二進位制數的位數。

(1)當尾數的值m採用原碼錶示時,規格化浮點數N的示數範圍為

(rm ^ (-1)) x (rm ^ ( - re ^ q)) ≤ N ≤ (1 - rm ^ ( -p')) x (rm ^ ( re ^ q -1))

(2)當尾數的值m採用補碼錶示時,規格化浮點數N的示數範圍在正數區間與m採用原碼錶示時相同,在負數區間的示數範圍為

- (rm ^ (re ^ q -1)) ≤ N ≤ - (rm ^ (-1) + rm ^ (-p)) x (rm ^ ( - re ^ q))

相關推薦

補碼點數規格化範圍

一、規格化 對二進位制浮點數N = m x rm ^ e(rm為尾數的基),若尾數m滿足1/2≤|m|<1,即尾數最高位數字為“1”,則為規格化的數。 對補碼來說:如果是正數,尾數的最高位為“1”;如果是負數,尾數的最高位應為“0”(即1.0x...x),或為“1

JavaScript 點數陷阱解法

眾所周知,JavaScript 浮點數運算時經常遇到會 0.000000001 和 0.999999999 這樣奇怪的結果,如 0.1+0.2=0.30000000000000004、1-0.9=0.09999999999999998,很多人知道

計算機點數規格化表示

說明 在IEEE標準中,浮點數在記憶體中的表示是將特定長度的連續位元組的所有二進位制位按特定長度劃分為符號域,指數域和尾數域三個連續域。 float float型別在記憶體中佔用的位數為: 1+8+23=32bits double 1+11+52

C++學習之點數的整型次方

點選開啟連結 class Solution { public: double Power(double base, int exponent) { double sum=1.0; if(exponent>0){ for(int i=1;i<

機器的原碼、反碼、補碼、移碼以及點數的二進位制表示

初學計算機組成原理時,有點兒搞不清楚機器數的各種表示方法。今天在這裡總結一下,希望對大家有幫助。 首先明確兩個概念,機器數是指將”+”和”-“數字化的數,其中用”0”表示”+”,”1”表示”-“。而對

10 c語言中整型int,long,long long範圍原碼補碼

 以2位元組為例來說:對於無符號的數值(原碼及補碼都一樣),最小值是0,最大值是1111  1111  1111  1111=216-1=65535,共有216個編碼。對於有符號的來說較為複雜:1)原碼

補碼原理——負數為什麼要用補碼

文首   我們都知道負數在計算機中是以補碼(忘了補碼定義的戳這裡)表示的,那為什麼呢?本文嘗試瞭解補碼的原理,而要想理解它,首先得理解算術中“模”的概念。所以首先看一下什麼是模,然後通過一個小例子來理解補碼。 1 模(Modulo) 1.1 什麼是模數 In mat

【劍指offer】輸入一個整數,輸出該二進位制表示中1的個數,其中負數用補碼

題目要求 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 核心思路 如果一個整數不為0,那麼這個整數至少有一位是1,如果把這個整數減1,那麼原來整數最右邊的1就會變為0,原來在1右邊的所有0都會變為1。那麼,利用n = n & (n - 1),

負數在計算機中如何表示,計算機中負數為什麼用補碼

負數在計算機中如何表示? 舉例來說,+8在計算機中表示為二進位制的1000,那麼-8怎麼表示呢? 很容易想到,可以將一個二進位制位(bit)專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,+8就是00001000,而-8則是100010

輸入一個整數,輸出該二進位制表示中1的個數。其中負數用補碼

如何求二進位制中1的個數(三種方法) 思路:1.在32位中,二進位制表示數字1方式為 00000000 00000000 00000000 00000001 首先我們的第一個方法就是一位一位的找,從左

二進位制負數用補碼的原因

    對於計算機或者DSP晶片來說,符號並沒有什麼特殊的儲存方式,其實是和數字一起儲存的。為了使得無論是無符號數還是符號數,都可以使用同樣的加法減法規則,符號數中的負數用正數的補碼錶示。     假設CPU的字長是16位。我們都知道-1 + 1 =0,而0x0001表示1,

演算法—輸入一個整數,輸出該二進位制表示中1的個數。其中負數用補碼

輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示! 明確幾點: 計算機中資料儲存形式位二進位制位。 正數以原碼形式儲存 負數以補碼形式儲存 int型別資料,佔4個位元組,一個位元組8位,所以int型別佔32個二進位制位。 比如:9的原碼位 

無符號和有符號(一) -- 原碼法和補碼

無符號數: 即沒有符號的數。 在c語言中就是 unsigned 型別的。 無符號數在計算機中的儲存較為簡單, 因為沒有符號位, 直接將數字化成二進位制然後儲存在對應的儲存器或者暫存器中。 這時暫存器或

輸入一個整數,輸出該二進位制表示中1的個數。其中負數用補碼

思路:用位運算來做,與1,第一位保持不變,前面的置0,然後判斷,再右移 class Solution { public: int NumberOf1(int n) { int i = 0; int count = 0;

10.輸入一個整數,輸出該二進位制表示中1的個數。其中負數用補碼

題目:輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 因為線上筆試的話時間有限,本人也不一定寫的對,這裡就直接呼叫庫函式來將整數轉換成對應的二進位制表示了 public class

輸入一個整數,輸出該二進位制表示中1的個數(其中負數用補碼)--《劍指offer》

題目描述 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 有兩種解題思路: 1.因為題目給出的是int型別,java中的int型別用32位表示,把這個數依次無符號右移(考慮到負數

點數類型轉換的其內存模型

unsigned 表達 value 及其 ebe sig 會有 裏的 -1 先看一段測試code: void do_test() { unsigned int uValue = 0xC1480000; printf("uValue = %u,%d,%x,

JavaScript 點數運算精度調整總結

chrom 作用域 運算 lac ber ace 標準 0.12 推薦 JavaScript 浮點數及運算精度調整總結 JavaScript 只有一種數字類型 Number,而且在Javascript中所有的數字都是以IEEE-754標準格式表示的。浮點數的精度問題不是J

談談JavaScript的算數運算、二進位制點數舍入誤差比較、型別轉換和變數宣告提前問題

  在《JavaScript權威指南》一書第三章節“型別、值和變數”中,作者詳細介紹了Javascript的數字、文字、布林值等型別,全域性物件,包裝物件,型別轉換,變數作用域等概念。其中有3個地方需要我們在使用過程中引起注意,可能稍不留神就犯錯:   1)算數運算與浮點數比較問題   2)

Java小記 —— 點數(double、float)的格式化問題處理

    平時常會面臨浮點數的格式處理問題,下面就舉例說一說常見的問題及處理:    1,科學計數法問題    一個浮點數123456789.10,在列印的時候變成了1.234567891E8,處理起來很簡單,如:double d = 123456789.10; System.