){
所有的
c/c++
編譯器都是按照
ieee
(國際電子電器工程師協會)制定的
ieee
浮點數表示法來進行運算的。這種結構是一種科學表示法,用符號(正或負)、指數和尾數來表示,底數被確定為
2,也就是說是把乙個浮點數表示為尾數乘以
2的指數次方再加上符號。下面來看一下具體的規格
:
符號位
指數字
小數部分
指數偏移量
單精度浮點數
1
位[31]
8
位[30-23]
23
位[22-00]
127
雙精度浮點數
1
位[63]
11
位[62-52]
52
位[51-00]
1023
我們以單精度浮點數來說明:
指數是
8位,可表達的範圍是0到
255
而對應的實際的指數是
-127
到+128
這裡特殊說明,
-127
和+128
這兩個資料在
ieee
當中是保留的用作多種用途的
-127
表示的數字是
0
128
和其他位數組合表示多種意義,最典型的就是
nan狀態
從儲存結構和演算法上來講,
double
和float
是一樣的,不一樣的地方僅僅是
float是32
位的,double是64
位的,所以
double
能儲存更高的精度任何資料在記憶體中都是以二進位制(1或著
0)順序儲存的,每乙個1或著
0被稱為
1位,而在
x86cpu
上乙個位元組是
8位。比如乙個
16位(
2位元組)的
short int
型變數的值是
1156
,那麼它的二進位制表達就是:
00000100 10000100
。由於intel cpu
的架構是
little endian
(請引數機算機原理相關知識),所以它是按位元組倒序儲存的,那麼就因該是這樣:
10000100 00000100
,這就是定點數
1156
在記憶體中的結構
.
我們先不考慮逆序儲存的問題,先按照順序的來講,最後再把他們翻過來就行了。
}
以上為中國式教育,最大的特點是直接公式,沒有原因,沒有歷史,只有結果.下面看看馬老師的教學方式,簡單易懂,引入歷史,
美國電氣和電子工程師協會
(ieee)
是乙個國際性的電子技術與資訊科學工程師的協會,是世界上最大的專業技術組織之一(成員人數),擁有來自
175個國家的
36萬會員(到
2023年)
。那麼在這之前計算機儲存浮點數是什麼標準呢?為什麼要有電子工程師協會這個組織存在,它是在什麼歷史背景下誕生的?浮點數的儲存標準
(ieee745)
又是在什麼歷史背景下誕生的?
ieee
只是個協會,定標準的協會,計算機的書中我們常看到的,以前沒有標準,都是個人的喜好,或個個公司的喜好,按自己喜好把浮點數儲存在計算機中,這樣浮點數儲存就沒有辦法溝通,每個公司用的都不一樣,所以為了統一標準
ieee
出現了,
ieee
有很多標準其中浮點數儲存的標準叫
ieee754,
哈哈,只是加了個編號,以後看
ieee
加數字,就知道是這個協會產生的一種為決解計算機溝通產生的乙個標準,比如
ieee802
標準就是區域網的國際標準
,那麼這個ieee之前
浮點數儲存是怎麼樣的呢?下面舉例說明一下:
如:浮點數
12345678.375(10)
如果不按
ieee754
標準存入計算機中是怎麼樣的?按邏輯來理解先要儲存整數部分
12345678
和小數部分
375,
然後再儲存小數點在第幾位.這樣
12345678
轉成16
進製就是
bc614e,需要3
個位元組。把小數部分轉
16進製制就是
0177,要2
個位元組,
記錄小數點在第幾位要
1個位元組
,那個一共用掉了
6個位元組
,當然在
ieee745
標準這前還有很多標準
, 儲存浮點數的方式都不一樣
.這時產生了乙個問題
,整數部分和小數部分占用的位元組不確字,所以儲存同乙個資料占用的位元組數都不一親,這樣我們自己來個標準,統一用
1.2345678375*10^7
,這樣占用的位元組數就一樣了.於是
ieee
組織就出現了給儲存浮點數定了乙個準標叫
ieee745,
標準如下:
型別儲存位數
偏移值數符(s)
階碼(e)
尾數(m)
總位數十六進製制
十進位制短實數(single,float)
1位8位
23位32位
0x7fh
+127
長實數(double)
1位11 位
52位64位
0x3ffh
+1023
臨時實數(延伸雙精確度,不常用)
1位15位
64位80位
0x3fffh
+16383
將-25.625
儲存到4
個位元組中
, 先轉二進位制
-11001.101
指數形式:
-1.1001101 * 2^4
127+4 = 131
……10000011
110000011(1)1001101 0000000000000000
符號位指數字(8)
小數字小數字(補齊)
┗━━━━資料位━━━━┛
1100 0001 1100 1101 0000 0000 0000 0000
c1cd0000
00 00 cd c1
總結一下:中國式教育只是簡單的把公式告訴我們,沒有讓我們思考公式產生的原因.所以學計算機由歷史引入會讓我們學的更好,之前的文章,有很多人反對馬老師的觀點,也有很多人支援這個觀點,反對觀點的人是站在使用者的角度去看問題,如果從使用者的角度去看這個問題,那麼馬老師說的觀點就是垃圾,如果站在乙個要把計算機學的十分精通的人的角度去看這個問題,那麼馬老師說的觀點就是精華了.
怎樣學好C和C 2
總 是被同學 們問到,如何學習c 和c 才不茫然,才不是亂學,想了一下,這裡 給出乙個總的回 復。一家之言,歡迎拍 磚。1 可以考慮先學 習c。大多數時 候,我們學習語 言的目的,不是為了成 為乙個語言 專家,而是希望成 為乙個解決問題的 專家。做乙個有用的程式 員,做乙個 賺錢的程式設計師。我 們...
資料結構 C 2
模板 今天看了模板一章,真是頭疼啊,什麼亂七八糟的東西,template,class,以是 的,真是乙個字亂,看書上的源 還有點感覺,不過有些怪,上機除錯一下,果不其然,錯誤十好幾個 真是有些悲哀啊,書都出了這麼多年了,錯誤還是錯誤,根本沒有改,發行量小一些還好,偏偏發行量還那麼大,如果一點也不了解...
系統學習C (2)
第一部分是c 的一些基本的知識,還沒有涉及成段的 而且都是一些零散的知識點,第二部分,涉及了函式的知識,涉及的知識點會多一點。練習6.4 編寫乙個與使用者互動的函式,要求使用者輸入乙個數字,計算生成該數字的階乘。在main函式中呼叫該函式。程式實現 include using namespace s...