1. 程式人生 > >C/C++中實型的儲存格式

C/C++中實型的儲存格式

實型資料又稱為浮點型資料。實型資料可分為單精度實型(float型)和雙精度實型(double型)。

資料型別

型別說明關鍵字

佔用位元組

取值範圍

精度(位)

單精度浮點型

float

4

±(3.4*10^-38  ~ 3.4*10^38)

7

雙精度浮點型

double

8

±(1.7*10^-308  ~ 1.7*10^308)

15

float型別的儲存格式:

符號位(1位)

階碼(8位)

尾數(23位)

31                    30                   22                     0

double型別的儲存格式:

符號位(1位)

階碼(11位)

尾數(52位)

63                    62                     51                      0

符號位:最高位表示符號位,0表示整數,1表示負數;

階碼:也即是2的指數,如2^12,其中,12就是指數,也即階碼。階碼佔8位,為了表示負數,引入了偏移量的概念,float型的偏移量為127(double型的偏移量為1023)。如果階碼為200,則表示的實際階碼為(200-127)也即73。

尾數:以2進制科學計數法表示後的小數部分。(整數部分預設為1,不儲存,所以就可以用23位表示24位的精度,或以52位表示53位的精度)

舉例將17.625換算成 float型。

首先,將17.625換算成二進位制位:10001.101   ( 0.625 = 0.5+0.125 =2^-1 + 2^-3)

再將 10001.101 表示為科學計數法的格式,也即1.0001101*10^4

符號位:由於是整數,所以為0

階碼:實際階碼為4,加上偏移量127,即為131,對應的二進位制為10000011 

尾數:由於整數部分預設為1,所以尾數部分只取0001101,不夠23位,在末尾補0。如果尾數超過23位,則捨去超過的部分,但是如果第24位為1,則產生進位;如果第24位為0,直接捨去超過部分。

綜上所述,17.625的 float 儲存格式就是:

0     10000011  00011010000000000000000

下面舉例說明上面紅色字的含義,先從一個具體的例子說起:

unsigned int  u = 4294967295;

float  f = u;

printf(“%f\n”, f);

最後輸出結果會是多少呢?

輸出結果為:4294967296.000000

為什麼會出現上面的結果呢?float表示的範圍比unsigned int 表示的範圍大,輸出的結果應該是4294967295.000000才對啊,但是為什麼是4294967296.000000呢?這主要是由於float型別與unsigned int型別的儲存格式不同造成的。

我們看看,4294967295的二進位制為1111 1111 1111 1111 1111 1111 1111 1111

按照上面的例子可以將該二進位制轉換為float型別的儲存格式為:(直接捨去超過23位的部分)

0  10011110  1111 1111 1111 1111 1111 111

但是尾數的第24位為1,所以會產生進位,由於尾數為全1,所以會將指數部分加1。

所以4294967295的float型別儲存格式為:

0  10011111  0000 0000 0000 0000 0000 000

再回到上面的程式段,當以float型輸出變數f的值時,就會根據float型別的儲存格式去還原為float型的值。也即:1. 0000 0000 0000 0000 0000 000 *2^(159-127)= 2^32 = 4294967296.000000(float保留6位小數)ps: 159的二進位制為1001 1111

相關推薦

C/C++資料的儲存格式

實型資料又稱為浮點型資料。實型資料可分為單精度實型(float型)和雙精度實型(double型)。 實型資料的長度、值域和精度 資料型別 型別說明關鍵字 佔用位元組 取值範圍 精度(位) 單精度浮點

C/C++儲存格式

實型資料又稱為浮點型資料。實型資料可分為單精度實型(float型)和雙精度實型(double型)。 資料型別 型別說明關鍵字 佔用位元組 取值範圍 精度(位) 單精度浮點型

C語言在計算機儲存

一 . 整型的表示       1.字面值後面加上L(l)表示long長整型       2.字面值後面加上U(u)表示usigned整型值       3.十進位制123  ...       4.

C語言符號的儲存類、連結屬性和生命週期

C語言中符號的儲存類 程式碼段:程式執行的程式碼,其實就是函式,它的生命週期是永久的(永久的意思就是在程式被執行時誕生,在程式終止時消亡),不過一般程式碼的生命週期我們並不關注。有時候放在程式碼段的不只是程式碼,還有const型別的常量,還有字串常量(const型別的常量、字串常量有時候放在

10 c語言int,long,long long範圍及原碼補碼錶示

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

C語言的定義

使用C語言時,用sizeof運算int,long int,long long int時,得到的結果不盡相同。那麼這些型別長度與什麼有關?與機器?與編譯器(語言實現)?還是作業系統?我查閱了一些資料,將之總結下來,希望能有一些參考價值。也歡迎指正糾錯,共同學習! C語言的實

C語言常量的表達方式

在C語言中,整型常量可用以下三種形式表示:1. 十進位制整數,即按日常接觸的數字形式正常表達。如123、-120;2. 八進位制整數,以0開頭的數字進行表達。如0123表示八進位制數123,即(123)

2、C語言變數的儲存,生存週期,作用範圍分類

C語言中變數的儲存類別一:按作用域劃分1、區域性變數:自動區域性變數、靜態區域性變數、暫存器變數。(區域性可見性)2、全域性變數:靜態外部變數、外部變數。(全域性可見性)二:按生存周期劃分1、動態儲存:自動變數、暫存器變數、形式引數。(生存時間只限於其作用範圍)2、靜態儲存:靜態區域性變數、靜態外部變數、外

C語言之資料型別

實型資料型別指的就是浮點數或實數1、實型資料型別的分類型別說明符位元數(位元組數)有效數字數的範圍float32(4)      6~7-10的38次方~10的38次方      double64(8)    15~16     -10的308次方~10的308次方由以上內容

C#程序使用LINQ to XML來查詢XML格式數據的

add pri esp 這一 toolbar eve read 創建 lai LINQ to XML 是一種啟用了 LINQ 的內存 XML 編程接口,使用它,可以在 .NET Framework 編程語言中處理 XML。它將 XML 文檔置於內存中,這一點很像文檔對象模型

C# WebAPIDateTime類字段在使用微軟自帶的方法轉json格式後默認含T的解決辦法

ria 重載方法 靜態 http bapi nts href 方法 edi 原文:C# WebAPI中DateTime類型字段在使用微軟自帶的方法轉json格式後默認含T的解決辦法

C語言——printf列印字串(關於資料在記憶體儲存格式的體現)

PS:本篇文章,是筆者在C語言學習過程中的所產生疑惑的地方,經過查閱相關資料得出的結論,如有錯誤的地方,還望指出改正。 int 佔4個位元組, 這裡輸入的8位16進位制數每相鄰兩位數代表一個位元組。如:44,43,42,41 int b = 0x414

C#把datetime類的日期轉化成年月日或其他格式方法總結

localtime ash diff time() com color 月份 大小 -s 日期格式:yyyyMMdd HH:mm:ss(註意此字符串的字母大小寫很嚴格) yyyy:代表年份 MM: 代表月份 dd: 代表天 HH: 代表小時(24小時制) mm:

理解C#語言的類轉換----初學者的理解,請大神指教

寫代碼 需要 con c# 初學 har 3.1 parse 範圍 一下都是在視頻教學中學到後的理解,如果說錯了請大神指教 C#語言中的類型轉換,就是將某個數據要轉換成另一個類型的數據。 c#語言中的數據類型主要有: char類型(字符類型); string類型(字符串類型

(轉)使用 CJSON 在C語言進行 JSON 的創建和解析的例講解

orm ret ear bject str 忘記 else aid 百度 使用 CJSON 在C語言中進行 JSON 的創建和解析的實例講解 本文用代碼簡單介紹cjson的使用方法,1)創建json,從json中獲取數據。2)創建json數組和解析json數

C語言學習筆記 (003) - C/C++參和形參(轉)

變化 避免 影響 學習筆記 ++ nbsp 過去 情況 真的 今天突然看到一道關於形參和實參的題,我居然不求甚解。藐視過去在我的腦海裏只有一個參數的概念,對於形參和實參的區別還真的不知道,作為學習了幾年C++的人來說,真的深深感覺對不起自己對不起C++老師 T。T 我

C語言的作用域,鏈接屬性和存儲類

硬件 變量的存儲 bsp 文件的 tro 們的 沒有 聲明 一個 作用域 當變量在程序的某個部分被聲明的時候,他只有在程序的一定漁區才能被訪問,編譯器可以確認4種不同類型的作用域:文件作用域,函數作用域,代碼塊作用域和原型作用域 1.代碼塊作用域:位於一對花括號之間的所

c#語言的類轉換

寫代碼 字符串 時間 編碼 3.1 表示 編寫 需要 string 類 在使用C#用語言編寫代碼的時候,經常要切換各種數據類型。這個時候就需要用到各種數字類型之間的切換。希望這篇隨筆可以有些幫助。 常用的數據類型轉換。例如,很多時候把用戶輸入的string 類

C語言數據類和變量

括號 函數返回值 轉換 函數調用模型 行修改 接收 返回值 log 不能 C語言中的數據類型 數據類型的本質,固定大小內存塊的別名。 數組名代表數組首元素的地址。 數組首元素的地址,&代表整個數組的地址。 數組數據類型,怎麽定義數據數組類型,定義數組類型指針,數組