第十章 葫蘆兄弟和五行法則(下)
「行吧,那這次先放過你,要是有下次,新賬舊賬一起算~」
老爹佯裝出一副惡人模樣說道。
「橋豆麻袋,這對話有一絲絲熟悉??!莫非老爹是因為我上午威脅了他老婆?唉~,看來老爹和老媽才是真愛,我可能真的是一個意外~」
想及此處,我不禁心中泛起一陣陣心酸,不由自主地嘆了一口氣。
「誒,老爹,我記得以前你跟老媽都說我是撿來的對吧?」
我腦中靈光一現(xiàn),突然想到了點什么。
「嗯,咋了,是想我通知你親爹親媽趕緊接你回去,然后好脫離我和你老媽的魔爪,是這個意思么?」
老爹斜著眼睛,一臉不善地看著我說道。
「額……你想多了,我肯定是親生的啊,畢竟普天之下除了你跟老媽還有誰能生出我這么優(yōu)秀的閨女?」
我內(nèi)心驚駭交加,沒想到一下就被老爹看穿了。于是趕緊吹了一個彩虹屁,立馬進(jìn)入商業(yè)互吹模式。
「你心里想什么老爹我清楚得很,畢竟你老爹我現(xiàn)在都還等著讓我回家繼承億萬家業(yè)的爹媽出現(xiàn)呢。哈哈~」
一臉嚴(yán)肅地爹說著說著自己就笑起來了。
「……」
這下輪到我無言以對了,真沒想到老爹居然是這樣的老爹。
「好了好了,玩笑話就到此為止。既然你已經(jīng)看書了,老爹相信你還是能夠理解的,那這部分知識老爹就不重復(fù)講一遍了,將其中需要注意的東西跟你說一下就好了。當(dāng)然了,如果你有什么疑問,可以隨時問老爹。」
「嗯嗯,好噠~」
「第一點,在不同的編譯器里邊四娃long(長整型)和五娃int(整型)可能不一樣,書上說int占2個字節(jié),實際上在很多編譯器里邊int都是占4個字節(jié)。占用的字節(jié)數(shù)不同,能賦值的數(shù)值范圍也就不同了,這是需要注意的一點。」
老爹扶了扶鼻梁上的眼鏡,一臉認(rèn)真地說道。
「那我怎么知道int真實占用的字節(jié)數(shù)是多少呢?」
我疑惑道。
「這個時候我們就用借用混沌先民sizeof的神通了。
sizeof這個混沌先民呢有一個讓人羨慕的神通——天眼,它一眼就能看透七個葫蘆娃的原型。
比如說你要看五娃int占用的字節(jié)大小,只需要sizeof(int)就可以了。
同理,也可以通過這種方式查看其他葫蘆兄弟占用幾個字節(jié)。」
「哦~,原來還有這種操作?」
「第二點,雖然三娃float(浮點)和四娃long(長整型)都占用4個字節(jié),但是float表示的數(shù)值范圍遠(yuǎn)遠(yuǎn)超過long。這是因為計算機(jī)在保存小數(shù)時和整數(shù)采取的是不同機(jī)制,整數(shù)的保存之前已經(jīng)和你說過了,至于小數(shù)是如何保存的,要等你初中學(xué)了指數(shù)才能明白了。這個不影響你學(xué)習(xí)編程,心里有個概念就好了。」
「嗯,我知道了,看書的時候的確是有這個疑問。」
我恍然大悟道。
「第三點,大娃(long double)、二娃(double)和三娃(float)他們表示的小數(shù)可能會有精度損失?!?p> 「什么叫做精度損失?為什么會有精度損失?」
「也就是說,原本你要表示0.5,但保存的真實值可能是0.5000000000000001,這個就叫精度損失。精度損失是保存小數(shù)的機(jī)制造成的,因為有些小數(shù)不能完全精確的轉(zhuǎn)換為指數(shù)形式。
因此,我們在對兩個浮點型數(shù)據(jù)進(jìn)行比較的時候就不能直接看值等不等,而是要采用逼近法?!?p> 「逼近法又是什么鬼?」
「就拿剛剛的例子來說,比如說現(xiàn)在有個double型的變量a,它的理論值為0.5,我們要比較它等不等于0.5時,只需要拿a和0.5做減法運(yùn)算,如果相差的值小于0.0000000000000001,就認(rèn)為a就是0.5?!?p> 「哦~,懂了懂了?!?p> 「正是因為表示小數(shù)的大娃、二娃和三娃有精度損失,所以涉及到和毛爺爺相關(guān)的程序,千萬、千萬、千萬不能用它們計算!重要的事情說三遍,這一點一定要記住!」
老爹鄭重地說。
「如果用了會怎樣?」
「想象一下你存壓歲錢的銀行卡中的錢平白無故變少了你會怎樣?」
「那肯定得去找銀行的麻煩啊,這還用說么?」
「如果是成千上萬人一起去找銀行的麻煩呢?」
老爹陰惻惻地說道。
「……這……銀行怕是要被拆了……」
我咽了一口口水,這畫面的確是太……要是銀行遭了殃,開發(fā)程序的程序員的下場……讓人有點不敢想啊。
「行吧,相關(guān)的知識就介紹完了,接下來你可以按照書上的例子敲代碼練習(xí)了,要是有什么問題隨時問老爹哈?!?p> 想到我馬上就要獨立敲程序了,內(nèi)心還有點小激動呢。我深深地吸了一口氣,平復(fù)一下心情。
我的雙手就如同一直翩翩飛舞的蝴蝶,行云流水般的打完了代碼。
認(rèn)真仔細(xì)的檢查了三遍后,確認(rèn)和書上一模一樣后,我打開了小黑屏。
編譯運(yùn)行一氣呵成,得到的結(jié)果也和書上別無二致。
首戰(zhàn)告捷,一股巨大的成就感油然而生,仿佛我剛剛寫的是一個舉世矚目的大工程。
書上的示例無非是對數(shù)據(jù)類型和五種算求運(yùn)算符的使用,在嘗試了幾個例程切得到正確的后,我開始將目光轉(zhuǎn)移到課后練習(xí)題。
課后練習(xí)題主要還是以理論知識為主,其中有一道題簡單到讓我懷疑人生。
「x和y都為double型變量,其中x=2,y=x+3/2的值是:
A 3.500000
B 3
C 2.000000
D 3.000000
這真是大學(xué)生做的題?居然還有兩個相同的答案,出題的人怕也是喝醉了哦?!?p> 看到B、D選項答案一樣,于是我首先給排除掉了,2+3/2=3.5,所以我信心滿滿地選了A。
然而讓我無語的是,老爹的答案一開始是A,然后劃了再選擇的D。
這是什么神操作?
「老爹老爹,你做這道題的時候是不是失戀了?。窟@都能夠改錯?」
「別急別急,我先瞅瞅?!?p> 老爹目光在那道題上一掃而過,隨后就笑了起來。
「這道題的確選D。」
「納尼?那選D的話,B錯哪兒了?而且你居然告訴我2+3/2=3,你數(shù)學(xué)老師的棺材板怕是都按不住了!」
我不服道。
「皮癢癢了是不是?敢這么說你的師公們,你個欺師滅祖的兔崽子不怕打雷么?」
老爹沉下臉說道。
意識到自己說錯了話,我在心里吐了吐舌頭。然后急忙更正:「教你數(shù)學(xué)的師公們都能被你氣得吐出一升血?!?