




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.C語言 第四章 數(shù)據(jù)類型第四章數(shù)據(jù)類型4.1這是個(gè)有類型的世界4.2數(shù)據(jù)類型根本概念4.2.1理解數(shù)據(jù)類型4.2.2理解整型和實(shí)型4.2.3理解數(shù)值的范圍4.2.4理解有符號(hào)數(shù)和無符號(hào)數(shù)4.3字符集和保存字4.3.1字符集4.3.2保存字4.4根本數(shù)據(jù)類型4.4.1字符型和各種整型、實(shí)型4.4.2布爾型bool和無類型void4.4.3為數(shù)據(jù)類型起別名:typedef 4.5 sizeof的使用4.5.1 sizeof例程4.1這是個(gè)有類型的世界問大家一個(gè)問題:現(xiàn)實(shí)生活,有哪些信息可以用計(jì)算機(jī)可以管理呢?職工、學(xué)員、客戶、工資、原材料、產(chǎn)品、商品現(xiàn)實(shí)中實(shí)現(xiàn)用計(jì)算機(jī)管理的信息已是無數(shù)。職工又有
2、什么信息呢?職工有姓名、性別、出生年月、家庭住址、 ,婚否、工齡、工種、工資、等等。這兩個(gè)問題你可能答復(fù)得不錯(cuò),如今,考驗(yàn)?zāi)闱皫渍掠袥]有認(rèn)真學(xué)習(xí)的時(shí)刻到了,請(qǐng)看下面這個(gè)問題:所有的這些信息,在計(jì)算機(jī)里都是以什么樣的數(shù)據(jù)形式來表達(dá)呢?請(qǐng)自覺閉上眼睛,想一想。再看以下的各種答復(fù)。"二進(jìn)數(shù)",正確。"已數(shù)字化的數(shù)據(jù)",也算正確。"0和1",正確。"機(jī)器語言",正確,你還記得第一章的內(nèi)容啊,不錯(cuò)。本章需要繼續(xù)的一個(gè)問題就由此開場(chǎng)。所有的信息都用機(jī)器語言-那些0和1-表達(dá),那你我編寫程序豈不很難?這是第一章的問題,你還記得在
3、第一章關(guān)于本問題答復(fù)嗎?那就是:機(jī)器語言不好記,那就用高級(jí)語言。高級(jí)語言高級(jí)在哪里呢?第一章也有答案:就高級(jí)在它盡量向"高級(jí)動(dòng)物"的思維習(xí)慣做了一些接近。當(dāng)然,只能說盡量,它必須仍然保持符合機(jī)器的絕大部分特點(diǎn),否那么,大家就不要學(xué)計(jì)算機(jī)語言了。數(shù)據(jù)類型,就是計(jì)算機(jī)語言向人類語言靠近時(shí),走出的第一步,很重要的一步。機(jī)器語言或匯編語里,沒有數(shù)據(jù)類型一說。人類的世界,是有類型的世界。樹木花草,歸一類:植物;豬狗貓羊,動(dòng)物;金銀銅鐵,金屬;你我他她,人類。不要告訴我你不是人類,在這虛擬的網(wǎng)絡(luò)的世界上一章筆者"鼓吹"過一個(gè)觀點(diǎn):整個(gè)世界都可以用數(shù)據(jù)和處理來表達(dá)?;?/p>
4、于此,整個(gè)世界就是一個(gè)程序;而萬物是世界的數(shù)據(jù)。假設(shè)你找一個(gè)人,對(duì)他說:"你等于一只豬",他一定暴跳如雷。為什么呢?嘻嘻,學(xué)了這一章,我們就可以從程序的角度來解釋了:人和豬不是一類型,不適于做賦值操作。待以后我們學(xué)了C+的"類",那么又有更好答復(fù):上帝創(chuàng)造世界是,沒有為人"類"實(shí)現(xiàn)參數(shù)為豬"類"的拷貝構(gòu)造函數(shù),或等號(hào)重載函數(shù)。想和上帝做同行?快做個(gè)程序員。4.2數(shù)據(jù)類型根本概念4.2.1理解數(shù)據(jù)類型"數(shù)據(jù)類型"就是這么一個(gè)很好理解的概念。我們的重點(diǎn)是理解在計(jì)算機(jī)編程世界中,有哪些根本的數(shù)據(jù)類型?
5、在人類世界里,數(shù)據(jù)類型那就多了,把人類的對(duì)萬物劃分類型的方法照搬入計(jì)算機(jī)世界,顯然不可能。怎么辦呢?方法就是:抽象。計(jì)算機(jī)先哲們?yōu)槲覀冏隽诉@一切。其中,最重要類型,也稱為C/C+語言的根本數(shù)據(jù)類型,只有兩個(gè):"數(shù)值"和"字符"。第一是"數(shù)值類型"。這樣,在職工的信息中,譬如年紀(jì),工齡、工資就有了歸屬。你如今需要暫時(shí)不將目光從屏幕前移開,想一想"數(shù)值類型"是一個(gè)多好的抽象結(jié)果!無論進(jìn)展任何信息管理,分開了"數(shù)",還能管理什么?第二是"字符類型"。像職工姓名或家庭住址,這些由字符
6、類型的數(shù)據(jù)組成。你可能想不到的還有,職工的 號(hào)這也是由字符類型數(shù)據(jù)組成。0、1、2、3不是數(shù)字嗎?應(yīng)該屬于上面的"數(shù)值"類型吧?嗯,你聽我說:現(xiàn)實(shí)生活中,數(shù)字被廣泛地應(yīng)用在兩種不同范疇:其一是那些典型的,需要進(jìn)展計(jì)算的場(chǎng)合。比方雞蛋1斤2.3元;其二那么那些只用來表示符號(hào)的范疇。比方 號(hào)碼,比方車牌號(hào)。把兩個(gè) 號(hào)碼進(jìn)展相加或相減的操作是沒有意義的?;跀?shù)字的兩種完全不一樣的使用范疇,所以在被抽象到計(jì)算機(jī)程序語言時(shí),數(shù)字被分到"數(shù)值"和"字符"兩種類型中。但字符類型并不只有阿拉伯?dāng)?shù)字,鍵盤上的字母符號(hào),都屬于字
7、符類型。在C/C+中,"字符類型"其實(shí)也可歸入數(shù)值類型。在某些情況下,它仍然會(huì)被用來參與計(jì)算。比方在計(jì)算機(jī)中,字符'A'加1后,會(huì)得到下一個(gè)字符'B',這種操作符合我們的習(xí)慣。4.2.2理解整型和實(shí)型數(shù)值類型又被分為"整型"和"實(shí)型"。整型就是不帶小數(shù)位的數(shù),而實(shí)型那么是指帶小數(shù)位的數(shù),也稱為"浮點(diǎn)數(shù)"。我們?cè)谏钪幸话悴⒉蛔鋈绱藚^(qū)分。譬如說雞蛋的價(jià)格罷,今兒廉價(jià)了,一斤2塊整,但這不防礙明兒價(jià)漲了,我們說成:漲了,2.30元一斤。在編程時(shí)可不能這樣,你必須事先考慮到雞蛋的價(jià)格是必須
8、帶小數(shù)的,就算如今是2塊整,也得將價(jià)格定為實(shí)型,否那么,漲成2塊3時(shí),計(jì)算時(shí)機(jī)把那0.3元給丟了,還是變成2元整。你會(huì)問為什么不直接就定一個(gè)實(shí)型就好呢?實(shí)型不就包含了整型的值嗎如2.0等于2元?好!問得好,我不喜歡書上說什么就記什么,一個(gè)"為什么"也不去想的學(xué)習(xí)方法。由于才能的限制,大多數(shù)人如你我,都不能為這個(gè)世界創(chuàng)造奉獻(xiàn)什么新技術(shù),我們只能作為技術(shù)的"承受者"而活在這個(gè)世上。然而正因?yàn)橹荒茏鳛槌惺苷撸覀兙透鼞?yīng)該在學(xué)習(xí)任何技術(shù)前,先學(xué)會(huì)從一定的高度來詢問:為什么會(huì)有這個(gè)技術(shù)這個(gè)技術(shù)為什么會(huì)出現(xiàn)?我如今需要這個(gè)技術(shù)嗎必竟學(xué)習(xí)需要占用時(shí)間?這么做并非是一種
9、消極態(tài)度,相反,它的積極意議在于:經(jīng)過這種考慮,你不僅可以把有限的時(shí)間花在值的學(xué)習(xí)上,而且只有弄明白了一樣技術(shù)或技術(shù)的概念產(chǎn)生的需要,我們才有可能真正理解它,從而比別人學(xué)得更深化更本質(zhì)。一個(gè)問題牽出一堆廢話,答復(fù)卻很簡(jiǎn)單:因?yàn)樵谟?jì)算機(jī)里,對(duì)整數(shù)的運(yùn)算要遠(yuǎn)遠(yuǎn)快于對(duì)浮點(diǎn)數(shù)的運(yùn)算,所以,在人類的思維習(xí)慣與計(jì)算機(jī)特點(diǎn)之間,必須做一個(gè)折衷。折衷的結(jié)果就是雖然都是數(shù)值類型,但程序員在程序時(shí),必須事先想好,哪些數(shù)據(jù)是必須帶小數(shù)計(jì)算的,那些數(shù)據(jù)定為實(shí)型,比方工資,沒有哪個(gè)員工會(huì)認(rèn)為老板可以將自已工資中的小數(shù)位忽略不計(jì);而那些可以不用,或者可以不計(jì)較小數(shù)的數(shù)值,那么被建議設(shè)計(jì)成整型,比方人的年紀(jì),雖然可以,但我
10、們很少需要有類似1.6歲這種說法。想想,假設(shè)一位女士說自已28歲,而你卻立即糾正她:"不,準(zhǔn)確地說,您已經(jīng)28.7歲了"結(jié)局會(huì)怎樣呢?為了那0.7歲,不僅你的程序會(huì)跑得慢,而且會(huì)倍受女人的白眼殺傷。想想其實(shí)也很自然:工資必須設(shè)計(jì)成實(shí)型,而年齡雖然不是必須,但建議設(shè)計(jì)成整型。4.2.3理解數(shù)值的范圍然而事情并未就此完畢。顧及計(jì)算機(jī)的運(yùn)行速度,人程序員做出了妥協(xié),必須面對(duì)"整型"或"實(shí)型"的考慮。另一方面,和速度同樣重要的是計(jì)算機(jī)的空間的考慮。它讓程序員必須再做一步妥協(xié)。小時(shí)候你一定有過這樣的經(jīng)歷:你說100,另一個(gè)小伙伴就說101。你說
11、1000,他就說1001,你說10000,他就說:那我10001。總之他就是要比你大1。這種游戲不會(huì)有分出勝負(fù)的結(jié)局,只會(huì)讓你郁悶為什么就不能有個(gè)最大數(shù)讓你說了以后,那家伙就再了無法往上加1了!如今你學(xué)編程,兒時(shí)的"妄想"終于在計(jì)算機(jī)的世界中實(shí)現(xiàn)了。在計(jì)算機(jī)世界中,你可以說一個(gè)數(shù),當(dāng)別人再住這個(gè)數(shù)加1時(shí),真不幸,計(jì)算時(shí)機(jī)告訴他說:加1是加1了,可是結(jié)果變成0,甚至是負(fù)數(shù)。這就是計(jì)算機(jī)的空間問題:任何一個(gè)量,都有一個(gè)大的上限,和小的下限,出了這個(gè)范圍比上限還大,比下限還小,就會(huì)稱為溢出。這是一種物理的現(xiàn)實(shí),也是一種人為的規(guī)定。為什么要這樣規(guī)定?原因是計(jì)算機(jī)的存儲(chǔ)器,特別是其中
12、很重要的內(nèi)存見上章,其可存儲(chǔ)的數(shù)據(jù)多少總是有限度。而且,同樣大小數(shù),2進(jìn)制的表達(dá)形式比10進(jìn)制長(zhǎng)得多,假設(shè)允許編程像生活中一樣任何一個(gè)數(shù)都可以很大很大,也就是這個(gè)量表達(dá)起來將很長(zhǎng)很長(zhǎng),那么存儲(chǔ)器的空間就會(huì)很快用完!無窮大就不用說了,因?yàn)椴豢赡苡袩o窮大的存儲(chǔ)器。就是這樣,數(shù)值類型在被劃分為整型和實(shí)型后,將根據(jù)所占用的空間而被繼續(xù)劃分為幾種不同類型。而我們,在考慮工資必須設(shè)計(jì)成帶小數(shù)的實(shí)型后,必須再面對(duì)一個(gè)設(shè)計(jì)上的考慮,工資這個(gè)量在程序里要占多大空間?根據(jù)其實(shí)很簡(jiǎn)單,就看你的單位最高月薪是多少,憑此找到一個(gè)適宜的類型。比方月薪不超過1萬元,那我們選擇一個(gè)剛剛可以包含10000的數(shù)據(jù)類型。兩種根底類
13、型:數(shù)值類型和字符類型,前者說了很多,如今我們也來對(duì)字符類型做一些附加說明。字符類型要比數(shù)值類型簡(jiǎn)單得多:它不能帶小數(shù),所以沒有整型實(shí)型之說。它占用1個(gè)字節(jié),已經(jīng)是計(jì)算機(jī)能單獨(dú)處理的最小空間單位,所以也不存在繼續(xù)分為不同空間長(zhǎng)度的問題。因此,我們將以它為例,詳細(xì)說明有關(guān)數(shù)據(jù)類型的一些根本而重要的概念。第1、由于計(jì)算機(jī)和編程都是老外的創(chuàng)造,而老外生活中常用的的字符并不多-主要是阿拉伯?dāng)?shù)字、英文字母、標(biāo)點(diǎn)符號(hào)等-所以字符的寬度被定為1個(gè)字節(jié)假設(shè)忘了什么叫字節(jié),請(qǐng)看上章。1字節(jié)=8位,所以它能表示的最大數(shù)當(dāng)然是8位都是1既然2進(jìn)制的數(shù)只能是0或1,假設(shè)是我們常見的10進(jìn)制,那就8位都為9,這樣說,你
14、該懂了?。1字節(jié)的二進(jìn)制數(shù)中,最大的數(shù):11111111。這個(gè)數(shù)的大小是多少呢?讓我們來把它轉(zhuǎn)換為十進(jìn)制數(shù)。無論是什么進(jìn)制,都是左邊是高位,右邊是低位。第一章中我們說過,10進(jìn)制數(shù)的最低位個(gè)位的權(quán)值是100,第二位是101,第三位是102,用小學(xué)課本上的說法就是:個(gè)位上的數(shù)表示幾個(gè)1,十位上的數(shù)表示向個(gè)10,百位上的數(shù)表示幾個(gè)100二進(jìn)制數(shù)那么是:第1位數(shù)表示幾個(gè)120,第2位數(shù)表示幾個(gè)221,第3位數(shù)表示幾個(gè)422,第4位數(shù)表示向個(gè)823在C/C+中,很多計(jì)數(shù)的習(xí)慣都是從0開場(chǎng),所以,在你看明白上面那行內(nèi)容后,讓我們立即改口換成下面的說法,以后我們只用這種說法:二進(jìn)制數(shù):第0位數(shù)表示幾個(gè)12
15、0,第1位數(shù)表示幾個(gè)221,第3位數(shù)表示幾個(gè)422,第4位數(shù)表示向個(gè)823按照這種說法,我們可以發(fā)現(xiàn),從右向左數(shù),第n位數(shù)的權(quán)值=2的n次方。二進(jìn)制各位權(quán)值的計(jì)算方法:第n位權(quán)值=2n下表詳細(xì)地表示2進(jìn)制數(shù):11111111是如何逐位計(jì)算,累加得到10進(jìn)制的值:第幾位76543210合計(jì)權(quán)值27=12826=6425=3224=1623=822=421=220=1 2進(jìn)制11111111 10進(jìn)制1286432168421 255上表表示了這么一個(gè)計(jì)算過程*表示乘號(hào):1*27+1*26+1*25+1*24+1*23+1*22+1*21+1*20=255順便說一句,假設(shè)你忘了20等于多少有點(diǎn)遲疑
16、,請(qǐng)復(fù)習(xí)一下初中的數(shù)學(xué)知識(shí):任何數(shù)的0次方都等于1結(jié)果是:11111111b=255d為不了互相混淆,我們?cè)跁谐S胋來表示前面的數(shù)是2進(jìn)制的,而d那么表示該數(shù)是10進(jìn)制數(shù)。同樣地,另有8進(jìn)制數(shù)用o表示,16進(jìn)制用h表示。不過記住了,這只是在書中使用,在程序中,另有一套表示方法。以前我們知道1個(gè)字節(jié)有8位,如今通過計(jì)算,我們又得知:1個(gè)字節(jié)可以表達(dá)的最大的數(shù)是255,也就是說表示0255這256個(gè)數(shù)。那么兩個(gè)字節(jié)雙字節(jié)數(shù)呢?雙字節(jié)共16位。1111111111111111,這個(gè)數(shù)并不大,但長(zhǎng)得有點(diǎn)眼暈,從如今起,我們要學(xué)會(huì)這樣來表達(dá)二制數(shù):1111 1111 1111 1111,即每4位隔一空
17、格。雙字節(jié)數(shù)最大值為:1*215+1*214+1*213+1*212+1*211+1*210+1*22+1*21+1*20=65535很自然,我們可以想到,一種數(shù)據(jù)類型允許的最大值,和它的位數(shù)有關(guān)。詳細(xì)的計(jì)算方法方法是,假設(shè)它有n位,那么最大值就是:n位二進(jìn)制數(shù)的最大值:1*2n-1+1*2n-2+.+1*20任何一種根本數(shù)據(jù)類型,都有其范圍。比方字符類型,它的最大值是255,那么,當(dāng)一個(gè)數(shù)在其類型的范圍已經(jīng)是最大值時(shí),假設(shè)再往上加1,就會(huì)照成"溢出"。其實(shí),有限定的范圍的數(shù)量,并不只在計(jì)算機(jī)中出現(xiàn)。鐘表就是一個(gè)例子。10點(diǎn)再加1點(diǎn)是11點(diǎn),再加1點(diǎn)是12點(diǎn),可是再加1點(diǎn),
18、就又回到1點(diǎn)。再如汽車的行程表,假設(shè)最多只能顯示99999公里,當(dāng)?shù)竭_(dá)最高值后繼續(xù)行駛,行程表就會(huì)顯示為00000公里。4.2.4理解有符號(hào)數(shù)和無符號(hào)數(shù)回頭看上一節(jié),我們所講的數(shù)都是正數(shù)。同樣是年紀(jì)和工資,前者不需要有負(fù)值,但后者可能需要-至少所有的老板都這樣認(rèn)為。那么,負(fù)數(shù)在計(jì)算機(jī)中如何表示呢?這一點(diǎn),你可能聽過兩種不同的答復(fù)。一種是教科書,它會(huì)告訴你:計(jì)算機(jī)用"補(bǔ)碼"表示負(fù)數(shù)??墒怯嘘P(guān)"補(bǔ)碼"的概念一說就得一節(jié)課,這一些我們需要在第6章中用一章的篇幅講2進(jìn)制的一切。再者,用"補(bǔ)碼"表示負(fù)數(shù),其實(shí)一種公式,公式的作用在于告訴你,想得
19、問題的答案,應(yīng)該如何計(jì)算。卻并沒有告訴你為什么用這個(gè)公式就可以和答案?另一種是一些程序員告訴你的:用二進(jìn)制數(shù)的最高位表示符號(hào),最高位是0,表示正數(shù),最高位是1,表示負(fù)數(shù)。這種說法本身沒錯(cuò),可是假設(shè)沒有下文,那么它就是錯(cuò)的。至少它不能解釋,為什么字符類型的-1用二進(jìn)制表示是"1111 1111"16進(jìn)制為FF;而不是我們更能理解的"1000 0001"。為什么說后者更好理解呢?因?yàn)榧热徽f最高位是1時(shí)表示負(fù)數(shù),那1000 0001不是正好是-1嗎?。讓我們從頭說起。1、你自已決定是否需要有正負(fù)。就像我們必須決定某個(gè)量使用整數(shù)還是實(shí)數(shù),使用多大的范圍數(shù)一樣,我
20、們必須自已決定某個(gè)量是否需要正負(fù)。假設(shè)這個(gè)量不會(huì)有負(fù)值,那么我們可以定它為帶正負(fù)的類型。在計(jì)算機(jī)中,可以區(qū)分正負(fù)的類型,稱為有符類型,無正負(fù)的類型只有正值,稱為無符類型。數(shù)值類型分為整型或?qū)嵭?,其中整型又分為無符類型或有符類型,而實(shí)型那么只有符類型。字符類型也分為有符和無符類型。比方有兩個(gè)量,年齡和庫(kù)存,我們可以定前者為無符的字符類型,后者定為有符的整數(shù)類型。2、使用二制數(shù)中的最高位表示正負(fù)。首先得知道最高位是哪一位?1個(gè)字節(jié)的類型,如字符類型,最高位是第7位,2個(gè)字節(jié)的數(shù),最高位是第15位,4個(gè)字節(jié)的數(shù),最高位是第31位。不同長(zhǎng)度的數(shù)值類型,其最高位也就不同,但總是最左邊的那位如下示意。字符
21、類型固定是1個(gè)字節(jié),所以最高位總是第7位。紅色為最高位單字節(jié)數(shù):1111 1111雙字節(jié)數(shù):1111 1111 1111 1111四字節(jié)數(shù):1111 1111 1111 1111 1111 1111 1111 1111當(dāng)我們指定一個(gè)數(shù)量是無符號(hào)類型時(shí),那么其最高位的1或0,和其它位一樣,用來表示該數(shù)的大小。當(dāng)我們指定一個(gè)數(shù)量是無符號(hào)類型時(shí),此時(shí),最高數(shù)稱為"符號(hào)位"。為1時(shí),表示該數(shù)為負(fù)值,為0時(shí)表示為正值。3、無符號(hào)數(shù)和有符號(hào)數(shù)的范圍區(qū)別。無符號(hào)數(shù)中,所有的位都用于直接表示該值的大小。有符號(hào)數(shù)中最高位用于表示正負(fù),所以,當(dāng)為正值時(shí),該數(shù)的最大值就會(huì)變小。我們舉一個(gè)字節(jié)的數(shù)
22、值比照:無符號(hào)數(shù):1111 1111值:255 1*27+1*26+1*25+1*24+1*23+1*22+1*21+1*20有符號(hào)數(shù):0111 1111值:127 1*26+1*25+1*24+1*23+1*22+1*21+1*20同樣是一個(gè)字節(jié),無符號(hào)數(shù)的最大值是255,而有符號(hào)數(shù)的最大值是127。原因是有符號(hào)數(shù)中的最高位被挪去表示符號(hào)了。并且,我們知道,最高位的權(quán)值也是最高的對(duì)于1字節(jié)數(shù)來說是2的7次方=128,所以僅僅少于一位,最大值一下子減半。不過,有符號(hào)數(shù)的長(zhǎng)處是它可以表示負(fù)數(shù)。因此,雖然它的在最大值縮水了,卻在負(fù)值的方向出現(xiàn)了伸展。我們?nèi)砸粋€(gè)字節(jié)的數(shù)值比照:無符號(hào)數(shù):0-255有
23、符號(hào)數(shù):-128-0-127同樣是一個(gè)字節(jié),無符號(hào)的最小值是0,而有符號(hào)數(shù)的最小值是-128。所以二者能表達(dá)的不同的數(shù)值的個(gè)數(shù)都一樣是256個(gè)。只不過前者表達(dá)的是0到255這256個(gè)數(shù),后者表達(dá)的是-128到+127這256個(gè)數(shù)。一個(gè)有符號(hào)的數(shù)據(jù)類型的最小值是如何計(jì)算出來的呢?有符號(hào)的數(shù)據(jù)類型的最大值的計(jì)算方法完全和無符號(hào)一樣,只不過它少了一個(gè)最高位見第3點(diǎn)。但在負(fù)值范圍內(nèi),數(shù)值的計(jì)算方法不能直接使用1*26+1*25的公式進(jìn)展轉(zhuǎn)換。在計(jì)算機(jī)中,負(fù)數(shù)除為最高位為1以外,還采用補(bǔ)碼形式進(jìn)展表達(dá)。所以在計(jì)算其值前,需要對(duì)補(bǔ)碼進(jìn)展復(fù)原。這些內(nèi)容我們將在第六章中的二進(jìn)制知識(shí)中統(tǒng)一學(xué)習(xí)。這里,先直觀地看
24、一眼補(bǔ)碼的形式:以我們?cè)械臄?shù)學(xué)經(jīng)歷,在10進(jìn)制中:1表示正1,而加上負(fù)號(hào):-1表示和1相對(duì)的負(fù)值。那么,我們會(huì)很容易認(rèn)為在2進(jìn)制中1個(gè)字節(jié):0000 0001表示正1,那么高位為1后:1000 0001應(yīng)該表示-1。然而,事實(shí)上計(jì)算機(jī)中的規(guī)定有些相反,請(qǐng)看下表:二進(jìn)制值1字節(jié)十進(jìn)制值1000 0000-128 1000 0001-127 1000 0010-126 1000 0011-125.1111 1110-2 1111 1111-1首先我們看到,從-1到-128,其二進(jìn)制的最高位都是1表中標(biāo)為紅色,正如我們前面的學(xué)。然后我們有些奇怪地發(fā)現(xiàn),1000 0000并沒有拿來表示-0;而100
25、0 0001也不是拿來直觀地表示-1。事實(shí)上,-1用1111 1111來表示。怎么理解這個(gè)問題呢?先得問一句是-1大還是-128大?當(dāng)然是-1大。-1是最大的負(fù)整數(shù)。以此對(duì)應(yīng),計(jì)算機(jī)中無論是字符類型,或者是整數(shù)類型,也無論這個(gè)整數(shù)是幾個(gè)字節(jié)。它都用全1來表示-1。比方一個(gè)字節(jié)的數(shù)值中:1111 1111表示-1,那么,1111 1111-1是什么呢?和現(xiàn)實(shí)中的計(jì)算結(jié)果完全一致。1111 1111-1=1111 1110,而1111 1110就是-2。這樣一直減下去,當(dāng)減到只剩最高位用于表示符號(hào)的1以外,其它低位全為0時(shí),就是最小的負(fù)值了,在一字節(jié)中,最小的負(fù)值是1000 0000,也就是-12
26、8。我們以-1為例,來看看不同字節(jié)數(shù)的整數(shù)中,如何表達(dá)-1這個(gè)數(shù):字節(jié)數(shù)二進(jìn)制值十進(jìn)制值單字節(jié)數(shù)1111 1111-1雙字節(jié)數(shù)1111 1111 1111 1111-1四字節(jié)數(shù)1111 1111 1111 1111 1111 1111 1111 1111-1可能有同學(xué)這時(shí)會(huì)混了:為什么1111 1111有時(shí)表示255,有時(shí)又表示-1?所以我再?gòu)?qiáng)調(diào)一下本節(jié)前面所說的第2點(diǎn):你自已決定一個(gè)數(shù)是有符號(hào)還是無符號(hào)的。寫程序時(shí),指定一個(gè)量是有符號(hào)的,那么當(dāng)這個(gè)量的二進(jìn)制各位上都是1時(shí),它表示的數(shù)就是-1;相反,假設(shè)事選聲明這個(gè)量是無符號(hào)的,此時(shí)它表示的就是該量允許的最大值,對(duì)于一個(gè)字節(jié)的數(shù)來說,最大值就
27、是255。這一節(jié)課,看似羅嗦,但我希望每位沒有編程根底,或者以前對(duì)進(jìn)制,對(duì)負(fù)值、補(bǔ)碼、反碼等概念,對(duì)數(shù)據(jù)類型理解不透徹的學(xué)員,都能多花時(shí)間反復(fù)閱讀,直到看懂得文中的每一張圖表的意思為止。假設(shè)有困難,請(qǐng)發(fā)信到問答處的專門信箱:wendabcbschool 為了方便我的查閱,請(qǐng)無關(guān)課程的問答或其它來信,不要發(fā)到這個(gè)郵址,謝謝。4.3字符集和保存字4.3.1字符集字符集和保存并不專屬于"數(shù)據(jù)類型"的根底知識(shí)。它是一門語言最根底的東西。就像字母A-Z對(duì)于英語的作用一樣。我把它放到這里,更多的是因?yàn)檫@是我們第一次要碰到它,在下一節(jié),馬上就要用了。幸好,它的難度和學(xué)會(huì)26個(gè)字母差多少。
28、每種語言都使用-組字符來構(gòu)造有意義的語句,組成C+程序的,最終的是以下這些字符空格這個(gè)字符不好表示,就直接寫上"空格"兩字了,以后同:26個(gè)字母的大小寫形式:ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrst;10個(gè)阿拉伯?dāng)?shù)字:0123456789;其它符號(hào):+-*/=,._:;?"'|!#%&空格其它符號(hào),包括漢字,那么可能作為程序中字符串的內(nèi)容,用于顯示等。最后,C/C+語言是區(qū)分大小的語言,也就是說ABC和abc并不一樣。這一點(diǎn)我們將在下一章特別強(qiáng)調(diào)。4.3.2保存字保存字也稱關(guān)鍵字。它是預(yù)先定義好
29、的標(biāo)識(shí)符,這些標(biāo)識(shí)符必須保存給C+語言自身專用。因?yàn)樗鼈冇脕碓诰幾g過程中表示特殊的含義。比方,我們想定義一個(gè)量為整數(shù)類型,那么C+就必須有一個(gè)詞來表示什么是整數(shù)類型,這個(gè)詞就是一個(gè)關(guān)鍵字。C,C+主要的關(guān)鍵字,我們?cè)谡履└奖砹谐?。下面先列出本章要用的關(guān)鍵字。char:字符類型int:整型float:?jiǎn)尉葘?shí)型浮點(diǎn)型double:雙精度實(shí)型unsigned:無符號(hào)類型signed:有符號(hào)類型bool:布爾類型true:布爾類型的真值false:布爾類型的假值void:無類型sizeof:獲得指定類型的所占用的范圍typedef:為某種類型取一別名4.4根本數(shù)據(jù)類型前面講的一些有關(guān)數(shù)據(jù)類型的各種根
30、本概念,下面是數(shù)據(jù)類型這一課真正開場(chǎng)的時(shí)候。假設(shè)在其中你有什么概念不能理解,最好的方法就是首先回頭看本章前面的內(nèi)容。4.4.1字符型和各種整型、實(shí)型類型標(biāo)識(shí)符類型說明長(zhǎng)度字節(jié)范圍備注char字符型1-128127-2727-1unsigned char無符字符型10255028-1short int短整型2-32768327672-15215-1unsigned short int無符短整型20655350216-1int整型4-21474836482147483647-231231-1unsigned int無符整型4042949672950232-1float實(shí)型單精度41.18*10-3
31、83.40*10387位有效位double實(shí)型雙精度82.23*10-3081.79*1030815位有效位long double實(shí)型長(zhǎng)雙精度103.37*10-49321.18*10493219位有效位unsigned用于修飾int和char類型。它使int或char類型成為無符號(hào)類型。signed是unsigned反義詞,如signed int表示有符號(hào)類型,不過signed可以省略,所以上面列出char,short int,int都是有符號(hào)類型。有short int短整型,所以也就有對(duì)應(yīng)long int長(zhǎng)整型。long int用于表示4個(gè)字節(jié)32位的整數(shù)。但是在我們?nèi)缃衿胀ㄊ褂玫?2位計(jì)算機(jī)中,int默認(rèn)就是4個(gè)字節(jié),所以long也是可以省略的。較早幾年,也就是Windows 3.1/DOS流行的時(shí)候,那時(shí)的機(jī)器及操作系統(tǒng)都是16位的,這種情況下,int默認(rèn)是16位的。此時(shí),假設(shè)想實(shí)現(xiàn)32位整數(shù),就必須定義為這樣的類型:long int。在浮點(diǎn)數(shù)方面,我們最常用的將是double。它的精度適宜于我們?nèi)粘V械母鞣N運(yùn)算。當(dāng)然,float的精度也在很多情況下也是符合要求的。4.4.2布爾
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社區(qū)服務(wù)與物業(yè)管理作業(yè)指導(dǎo)書
- 通信技術(shù)與網(wǎng)絡(luò)知識(shí)測(cè)試卷
- 法律服務(wù)行業(yè)智能法律咨詢與案例管理系統(tǒng)方案
- 游戲設(shè)計(jì)游戲開發(fā)技術(shù)與場(chǎng)景應(yīng)用方案
- 節(jié)水農(nóng)業(yè)技術(shù)應(yīng)用方案
- 江蘇省無錫市玉祁高級(jí)中學(xué)2024-2025學(xué)年高二下學(xué)期3月自主檢測(cè)物理試題(原卷版+解析版)
- 濱江區(qū)古建筑修繕施工方案
- 企業(yè)概況與業(yè)務(wù)介紹
- 消防應(yīng)急通信保障2025年消防執(zhí)業(yè)資格考試題庫(kù)重點(diǎn)解析
- 2025年鉗工高級(jí)工技能鑒定題庫(kù)-鉗工高級(jí)工藝案例分析試題
- 結(jié)構(gòu)膠msdslord第一部分化學(xué)產(chǎn)品和公司名稱
- 2022年中國(guó)礦業(yè)權(quán)評(píng)估新準(zhǔn)則
- 礦體井下開采基建工程及采礦投標(biāo)文件
- 山東省音體美衛(wèi)配備標(biāo)準(zhǔn)資料
- 人工挖孔樁施工危險(xiǎn)源辨識(shí)與評(píng)價(jià)及應(yīng)對(duì)措施
- 領(lǐng)慧書院-中國(guó)古典禮儀和漢服文化淺析
- 2010年個(gè)人所得稅稅率表
- 抓住四個(gè)環(huán)節(jié)上好科學(xué)實(shí)驗(yàn)課
- 一級(jí)建造師繼續(xù)教育培訓(xùn)課程小結(jié)
- 酸堿鹽的通性
- 小學(xué)二年級(jí)下冊(cè)音樂-風(fēng)吹竹葉-接力版(9張)ppt課件
評(píng)論
0/150
提交評(píng)論