非常規(guī)入門C語言:2浦徊、初始數(shù)據(jù)類型

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末推汽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歧沪,更是在濱河造成了極大的恐慌歹撒,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诊胞,死亡現(xiàn)場離奇詭異暖夭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門迈着,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竭望,“玉大人,你說我怎么就攤上這事裕菠∫澹” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵糕韧,是天一觀的道長枫振。 經(jīng)常有香客問我,道長萤彩,這世上最難降的妖魔是什么粪滤? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮雀扶,結(jié)果婚禮上杖小,老公的妹妹穿的比我還像新娘。我一直安慰自己愚墓,他們只是感情好予权,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浪册,像睡著了一般扫腺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上村象,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天笆环,我揣著相機(jī)與錄音,去河邊找鬼厚者。 笑死躁劣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的库菲。 我是一名探鬼主播账忘,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼熙宇!你這毒婦竟也來了鳖擒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤烫止,失蹤者是張志新(化名)和其女友劉穎败去,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烈拒,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡圆裕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年广鳍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吓妆。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赊时,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出行拢,到底是詐尸還是另有隱情祖秒,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布舟奠,位于F島的核電站竭缝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沼瘫。R本人自食惡果不足惜抬纸,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耿戚。 院中可真熱鬧湿故,春花似錦、人聲如沸膜蛔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皂股。三九已至墅茉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呜呐,已是汗流浹背躁锁。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留卵史,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓搜立,卻偏偏與公主長得像以躯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子啄踊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容