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#練習——統計整型陣列中不重複數字的個數、將普通日期格式轉換成漢字日期格式、在控制檯錄入每個學生的姓名,當用戶輸入quit(不區分大小寫)時,程式停止接受使用者的輸入,並且顯示出使用者輸入的學生的個數
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ReviewPractice { class Pr
C# WebAPI中DateTime類型字段在使用微軟自帶的方法轉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語言中的數據類型 數據類型的本質,固定大小內存塊的別名。 數組名代表數組首元素的地址。 數組首元素的地址,&代表整個數組的地址。 數組數據類型,怎麽定義數據數組類型,定義數組類型指針,數組