小女也愛C 2 從浮點數儲存看中國式教育

2022-04-02 21:01:09 字數 4054 閱讀 1820

{

所有的

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...