<p>日常生活中,在我們周圍充斥著各種各樣的數(shù)據(jù)天梧。這些數(shù)據(jù)有著不同的形式盔性,且分布在不同的載體上。</p><p>但有些數(shù)據(jù)是有意義的呢岗,如費(fèi)用余額冕香、學(xué)號、身份證號后豫、姓名悉尾、年齡等;而有些數(shù)據(jù)是無意義的挫酿,如......</p><p>而計算機(jī)被發(fā)明以來构眯,天生就是服務(wù)于科學(xué)計算的,即:<strong>一切計算機(jī)問題都是數(shù)學(xué)問題</strong>饭豹。</p><p>在<strong><a>上一章</a></strong>中鸵赖,計算機(jī)底層的計算方式是通過二進(jìn)制來確定的。同時為了能夠方便地使數(shù)據(jù)參與運(yùn)算拄衰,還引出最小處理寬度(寬度就二進(jìn)制位數(shù))和控制指令它褪。</p><p>那我們可以把哪些數(shù)據(jù)放在計算機(jī)“里面”呢?</p><p>理論上翘悉,所有數(shù)據(jù)都可以茫打。但首先我們解決數(shù)據(jù)從哪里來的問題,即信息的數(shù)字化妖混。</p><p>首先老赤,和數(shù)值相關(guān)的東西,我們可以很方便存儲在計算機(jī)中制市,剩下的問題就是精度和寬度的問題抬旺。</p><p>其次,我們還需要解決非數(shù)值信息的數(shù)字化問題祥楣。</p><p>那么我們先解決哪個問題呢开财?</p><p>為了避免問題的延伸,我們先解決寬度的問題误褪,即給不同的數(shù)據(jù)分配一個確定的類型责鳍,即數(shù)據(jù)類型。</p><p>首先兽间,我們能確定的第一個數(shù)據(jù)類型就是計算機(jī)的最小處理寬度历葛,無論是哪種機(jī)器,無論它的最小處理寬度是多大嘀略,我們都稱之為“字”恤溶,字的寬度稱之為“字寬”乓诽。那么為了和二進(jìn)制搭上關(guān)系,我們采用倍數(shù)增長的方式宏娄,擴(kuò)大數(shù)據(jù)類型的表示范圍问裕。</p><p>字->雙字->四字->八字->16字->32字->64字......</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-743bbaf5905b9bfe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>你想擴(kuò)大多少倍都可以,但必須是前一個數(shù)值的2倍孵坚。因為這樣的處理方式的難度是最低的。</p><p>于是窥淆,基于“字”概念的數(shù)據(jù)類型就出現(xiàn)了卖宠。但是它本身并不具有通用性和實際意義,因為“無論它的最小處理寬度是多大忧饭,我們都稱之為‘字’”扛伍。</p><p>這時,我們應(yīng)該想到貌似有一個8位的數(shù)據(jù)词裤。沒錯刺洒,在<strong><a>上一章</a></strong>中,我們使用8位二進(jìn)制的數(shù)據(jù)完整表示了<strong>控制字符</strong>(如換行等)吼砂、<strong>大小寫字母</strong>逆航、<strong>數(shù)字</strong>和<strong>常用標(biāo)點符號</strong>。那么渔肩,干脆就用8位作為最小處理寬度因俐。</p><p>那么,給個名字周偎,把8位寬度的稱為“字節(jié)”抹剩,同時將“字節(jié)”確定為通用的基本字寬。</p><p>這時蓉坎,我們得到了一些較為原始的數(shù)據(jù)類型:字節(jié)澳眷、雙字節(jié)、四字節(jié)......</p><p>我們能有多大的數(shù)呢蛉艾。钳踊。。這是一個問題伺通。因為需要看CPU能處理多大的數(shù)箍土。32位的CPU最大一次性處理32位,64位CPU最大一次性處理64位罐监。為啥是一次性呢吴藻?理論上來說,只要你能提供足夠的存儲空間弓柱,數(shù)字多大都沒問題沟堡,但是運(yùn)算是一部分一部分來的侧但,極端情況也有可能是一位一位來計算的。這種由CPU確定的最大一次性處理寬度航罗,稱之為“數(shù)據(jù)寬度”禀横。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>早期計算機(jī)的數(shù)據(jù)類型就是這樣。粥血。柏锄。很枯燥,很直白复亏,但也很簡約趾娃。</p><p>但這不是我們的目標(biāo),我們的目標(biāo)是“星辰大旱抻”抬闷。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>1 + 1 = 2</p><p>1 - 2 = ?</p><p>當(dāng)你在計算時有沒有想到這樣一個問題:正整數(shù)可以直接表示,但負(fù)整數(shù)和小數(shù)沒辦法直接在計算機(jī)中表示耕突。</p><p>因為計算機(jī)中沒有負(fù)號和小數(shù)點的概念笤成。解決辦法也是相當(dāng)簡單粗暴:用正整數(shù)來表示不就好了?</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p><strong>舉個例子</strong>:</p><p>使用字節(jié)來控制字寬眷茁。那最長就是8位炕泳,表示的范圍就是0到255(即0000 0000 ~ 1111 1111)。</p><p>首先我們先確定一下正數(shù)與負(fù)數(shù)的交界點蔼卡,那就是0喊崖。那我們就可以確定,0加上1就是正數(shù)雇逞,0減掉1就是負(fù)數(shù)荤懂。</p><p>如果我們需要表達(dá)-2,那就是0000 0000 - 0000 0010就等于1111 1110塘砸,因為0減1不足节仿,向前借2。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-4305d4839af3ecee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-c57ff2caf197d829.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/>那么掉蔬,教科書里是怎樣教的呢廊宪?</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-c57ff2caf197d829.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-fa2ef72ba7aa2442.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/>嬴寒隱約記得,取反碼再加1女轿。箭启。其實很簡單,根本用不著反碼蛉迹。所謂反碼傅寡,只是計算機(jī)的一種取反運(yùn)算而已,因為相比加減運(yùn)算,取反的操作荐操,那簡直是太快了芜抒,瞬時就可以完成。</p><p>為什么是瞬時呢托启?因為只需要對前面的位進(jìn)行取反宅倒,最低位根本不用管就可以完成一個負(fù)數(shù)的完整表達(dá)。根本不可能使用加減運(yùn)算屯耸。但作為人類拐迁,我們有時有必要理解計算機(jī)的運(yùn)算方式,但有時又沒有必要疗绣。而像這種特別基礎(chǔ)唠亚,基礎(chǔ)到對后面的知識沒有什么太大影響的東西,我們只需要理解最人性化的思路就可以了持痰。</p><p>但是教科書卻用計算機(jī)運(yùn)算的方式來介紹負(fù)數(shù)的表示原理,無疑是給剛接觸的小伙伴帶來了沉痛的負(fù)擔(dān)祟蚀。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>各位小伙伴可能已經(jīng)發(fā)現(xiàn)工窍,在計算機(jī)中,處于最高位的0是一個非常神奇的存在前酿。我們通過它能夠辨別是正數(shù)還是負(fù)數(shù)患雏,也能夠通過它,來判斷一個數(shù)據(jù)是不是正確的(就是低位數(shù)據(jù)的每一位運(yùn)算的結(jié)果罢维,稱為校驗)淹仑。其實我們還可以利用0來確定真假值,比如0為真谆沃,非0為假孙援,我們稱之為“布爾值”池磁。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>剛剛我們找到了負(fù)數(shù)的表示方案,此時吓肋,我們就需要找到非整數(shù)的表示方法了。那么如何利用整數(shù)來表示非整數(shù)呢瑰艘?</p><p>一種方式是直接規(guī)定第多少位開始是小數(shù)部分是鬼,當(dāng)然這種方式?jīng)]人會喜歡,而且靈活性也很差紫新。</p><p>其實這里我們就考慮到了小數(shù)點的變動問題:小數(shù)點是不動(小數(shù)位數(shù)固定)還是變化的(小數(shù)位數(shù)不定)均蜜。顯然,兩種形式各有優(yōu)劣芒率。</p><p>既然整數(shù)的表達(dá)最方便囤耳,那能否讓小數(shù)和整數(shù)直接掛鉤呢?可以。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>我們以科學(xué)計數(shù)法再<strong>舉個例子</strong>:</p><p>使用二進(jìn)制表示259.56紫皇,如果將其轉(zhuǎn)換為科學(xué)計數(shù)法就是2.595610^2慰安。</p><p>但很顯然我們還是沒辦法直接表示,既然縮小不行聪铺,那就嘗試放大化焕。于是我們可到等價的值2595610-2。這時其中所有相關(guān)的數(shù)值我們都是在計算機(jī)方便的表示:25956铃剔、10和-2撒桨。</p><p>但是不要忘了,計算機(jī)是基于二進(jìn)制的键兜,并非十進(jìn)制凤类,那就意味著,必須將這仨兄弟都轉(zhuǎn)換成二進(jìn)制就可以了普气。</p><p>可是谜疤,好像不太容易啊。因為我們一直是按照十進(jìn)制來處理现诀,但換成二進(jìn)制中夷磕,小數(shù)點的變動就不一樣了。</p><p>所以我們將259.56拆成兩部分仔沿,使用常規(guī)方案表示整數(shù)部分259坐桩,使用小數(shù)表示法表示小數(shù)部分0.56。</p><p>在十進(jìn)制的世界中封锉,1是1*100绵跷,10是110^1,0.1是110-1成福。</p><p>在二進(jìn)制中也是基本一致的碾局,1是1*20,2是12^1闷叉。</p><p>也就是說擦俐,我們需要表達(dá)某個大數(shù),就是讓這個數(shù)除以基數(shù)握侧,十進(jìn)制的基數(shù)就是10蚯瞧,那么二進(jìn)制的基數(shù)就是2;反之品擎,如果我們需要表達(dá)一個湊不整基數(shù)的小數(shù)埋合,就需要讓這個數(shù)乘以基數(shù)。</p><p>例如:256就是200+50+6=2100 +510+61萄传,表達(dá)邏輯是讓原來的數(shù)縮小甚颂,讓基數(shù)增大蜜猾。</p><p>再如:0.25就是0.2+0.05=210^-1+510^-2,表達(dá)邏輯是原來的數(shù)變大振诬,讓基數(shù)減小蹭睡。(說法不是很嚴(yán)謹(jǐn),因為不是讓基數(shù)本身發(fā)生變化赶么,而是權(quán)值肩豁,或者說是指數(shù)部分)</p><p>那么,0.56表示成二進(jìn)制就是讓這個數(shù)一直乘以2辫呻,直到小數(shù)部分沒有值為止清钥。</p><p>0.56 * 2 = 1.12 -> 取 1</p><p>0.12 * 2 = 0.24 -> 取 0</p><p>0.24 * 2 = 0.48 -> 取 0</p><p>0.48 * 2 = 0.96 -> 取 0</p><p>0.96 * 2 = 1.92 -> 取 1</p><p>……</p><p>很長很長:.100 0111 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 1011</p><p>所以就涉及到精度問題。放闺。祟昭。因為我們不可能把所有精力和空間全浪費(fèi)在小數(shù)的處理上。除非怖侦。篡悟。。有東西能夠幫我們自動完成這件事匾寝。</p><p>那么恰力,上面的259.56就可以分成三部分了,整數(shù)部分旗吁、小數(shù)部分、小數(shù)點位數(shù)停局。</p><p>當(dāng)然很钓,這只是一個示例。并不一定是現(xiàn)代計算機(jī)中用到的表達(dá)方式董栽。</p><p class="image-package"><img class="uploaded-img" src="https://upload-images.jianshu.io/upload_images/27354708-19256a575bed70f0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" width="auto" height="auto"/></p><p>至此码倦,我們已經(jīng)利用計算機(jī)中原有的東西實現(xiàn)了一些類型,如:數(shù)值锭碳、字符袁稽、布爾值,暫且稱他們?yōu)椤俺跏紨?shù)據(jù)類型”吧擒抛。</p><p>
</p>
非常規(guī)入門C語言:2浦徊、初始數(shù)據(jù)類型
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門迈着,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竭望,“玉大人,你說我怎么就攤上這事裕菠∫澹” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵糕韧,是天一觀的道長枫振。 經(jīng)常有香客問我,道長萤彩,這世上最難降的妖魔是什么粪滤? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮雀扶,結(jié)果婚禮上杖小,老公的妹妹穿的比我還像新娘。我一直安慰自己愚墓,他們只是感情好予权,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浪册,像睡著了一般扫腺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上村象,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼熙宇!你這毒婦竟也來了鳖擒?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布舟奠,位于F島的核電站竭缝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沼瘫。R本人自食惡果不足惜抬纸,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耿戚。 院中可真熱鬧湿故,春花似錦、人聲如沸膜蛔。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽皂股。三九已至墅茉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呜呐,已是汗流浹背躁锁。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 作為非常規(guī)入門的開篇,本系列將會以“信號”為起點刘陶,徐徐步入編程的世界胳赌。 一、信號與信息 假定某一天...
- If a program manipulates a large amount of data, it does ...
- 第二章 數(shù)據(jù)類型 2.1 常量與變量 2.1.1 關(guān)鍵字 2.1.2 數(shù)據(jù)類型 數(shù)據(jù)類型的作用:編譯器預(yù)算對象(變...
- 導(dǎo)讀:C語言程序中經(jīng)常涉及一些數(shù)學(xué)計算捍掺,所以要熟悉其基本的數(shù)據(jù)類型。數(shù)據(jù)類型學(xué)習(xí)起來比較枯燥再膳,不過結(jié)合之前的內(nèi)存概...
- 3.1 大話C語言變量和數(shù)據(jù)類型 在《數(shù)據(jù)在內(nèi)存中的存儲》一節(jié)中講到:●計算機(jī)要處理的數(shù)據(jù)(諸如數(shù)字挺勿、文字、符號饵史、...