前言
秀山土家族苗族ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!本節(jié)提要
一、幾種類型的對(duì)比
二、有關(guān)這幾種類型的補(bǔ)充
1.unsigned
2.char
3.short,int,long,long double
三、有關(guān)變量創(chuàng)建及賦值的一些問題
1.變量創(chuàng)建的格式
2.變量名
3.變量類型
4.常變量
1.const
2.define
5.不同類型的互相賦值問題
三、推薦練習(xí)
四、下節(jié)預(yù)告
本系列的意義在于兩點(diǎn),一則是作為本人(一個(gè)編程初學(xué)者)的學(xué)習(xí)筆記記錄,二則希望能對(duì)后來者提供一些幫助,因?yàn)楸救艘矠樾率?難免有些錯(cuò)誤或講述不清之處,懇請(qǐng)大家指出或提出建議,本人也會(huì)虛心修改。
本系列的目標(biāo)是幫助一個(gè)編程初學(xué)者快速擁有簡(jiǎn)單的編程能力,能夠自主完成洛谷入門級(jí)和部分普及級(jí)題目。
本節(jié)我將提供介紹幾種C語言中的數(shù)據(jù)類型并簡(jiǎn)單介紹他們的創(chuàng)建與初始化,他們主要包括字符型,整形家族,浮點(diǎn)型(又稱實(shí)型)家族
類型及 其關(guān)鍵字 | 所占大?。▎挝唬鹤止?jié)) | 取值范圍 | 輸入輸出格式符 | 創(chuàng)建樣例 | |
字符型 | char (字符型) | 1 | -2^7~2^7-1 | %c | char a='a'; |
整形家族 | int (整形) | 4 | -2^31~2^31-1 | %d | int a=100; |
short int (短整型) (int可省略) | 2 | -2^15~2^15-1 | %hd | short a=100; | |
long int (長(zhǎng)整型) (int可省略) | 8 | -2^63?~ 2^63?-1 | %ld | long a=100; | |
long long int (超長(zhǎng)整形) (int可省略) | 8 | -2^63?~ 2^63?-1 | %lld | long long a=100; | |
浮點(diǎn)型家族 | float (單精度浮點(diǎn)型) | 4 | -3.4E+38 ~ 3.4E+38 | %f | float a=1.0; |
double (雙精度浮點(diǎn)型) | 8 | -1.7E+308 ~1.7E+308? | %lf | double a=1.0; | |
long double (長(zhǎng)精度浮點(diǎn)類型) | 16 | -1.2E+4932 ~1.2E+4932 | %llf | long double a=1.0; |
補(bǔ)充:計(jì)算機(jī)中存儲(chǔ)單位的大小及轉(zhuǎn)換
?bit(比特)
?1 byte(字節(jié))=8 bit
?1 kb(字節(jié))=1024?byte
?1 mb(兆字節(jié))=1024 kb
?1 gb(吉字節(jié))=1024 mb
?1 tb(吉字節(jié))=1024?gb
?1 pb(拍字節(jié))=1024?tb
二、有關(guān)這幾種類型的補(bǔ)充 1.unsigned簡(jiǎn)單來說在以上的關(guān)鍵字(浮點(diǎn)型家族除外)前加上unsigned可使他們變?yōu)橄鄳?yīng)的無符號(hào)型,即他們不再能表達(dá)負(fù)值,其本質(zhì)是將數(shù)字的二進(jìn)制源碼(有關(guān)問題將在后面稱述)的符號(hào)位視為一般位,所以在賦值時(shí)我們需注意是否有將有符號(hào)型賦值與無符號(hào)型(或相反)的情況,以及他們的輸入輸出格式符(無符號(hào)型的,只需將有符號(hào)型的中的d換為u即可,如int 的為%d,對(duì)應(yīng)的unsigned int 為%u)
#includeint main()
{
int n = -100;
unsigned long int res = n;
printf("%ld\n", res);
printf("%lu\n", res);
return 0;
}
經(jīng)過了上面的闡述,請(qǐng)問上面的程序段打印的結(jié)果是否相同呢?
答案是
至于為什么第二個(gè)打印的結(jié)果為4294967196,這就涉及到二進(jìn)制源碼的問題了,此處我們暫且按下不表,我們將會(huì)在之后的內(nèi)容中學(xué)習(xí)到它
注:浮點(diǎn)數(shù)是不能用 unsigned來規(guī)范的。unsigned 的意思就是把內(nèi)存中的數(shù)據(jù)第一位也用來表示數(shù)據(jù),而不用于表示符號(hào)位。而浮點(diǎn)數(shù)規(guī)定內(nèi)存中數(shù)據(jù)的第一位必須是符號(hào)位。因此兩者之間是互相矛盾的,這也就是為什么浮點(diǎn)數(shù)不會(huì)有unsigned類型。
2.char在上面的類型中,我們規(guī)定,如果不標(biāo)明unsigned,那么默認(rèn)它是一個(gè)有符號(hào)類型,但char型不一樣,char在標(biāo)準(zhǔn)中不指定為signed或unsigned,它具體是有符號(hào)型,還是無符號(hào)型,將由編譯器決定。
3.short,int,long,long double這里提到的幾種類型實(shí)際上我們并沒有具體規(guī)定他所占的空間與大小到底是多少
如:
這就意味著,short 并不一定真的”短“,long 也并不一定真的”長(zhǎng)“,它們有可能和 int 占用相同的字節(jié)數(shù)。也就是說他們的大小及數(shù)據(jù)范圍將由操作系統(tǒng)和編譯器決定,而并非是一個(gè)具體值,如果我們想知道在當(dāng)前機(jī)器和編譯器下,他們的大小和數(shù)據(jù)范圍,我們可以利用 sizeof 關(guān)鍵字去進(jìn)行測(cè)算。
我們創(chuàng)建變量時(shí)使用如下格式 變量類型 變量名,并且為了保險(xiǎn)起見,我們一般在定義時(shí)就會(huì)對(duì)變量進(jìn)行初始化,如 float F=1.99; 這里我們定義了一個(gè)float類型的名字為F,值為1.99的變量。當(dāng)然,如果有需要,我們也可不對(duì)變量進(jìn)行初始化,如 float F;
2.變量名定義變量時(shí),變量名可以隨我們心意地命名(只要不與C語言中的關(guān)鍵字重名),但必須是字母(字母區(qū)分大小寫)、數(shù)字和下劃線的組合。同時(shí)變量名的開頭不能是數(shù)字,可以由字母或下劃線開頭。但是為了更規(guī)范,更通用的命名,一般來說我們會(huì)盡量遵守以下的規(guī)則(但并非是強(qiáng)制要求)
C 是一種簡(jiǎn)潔的語言, 命名也應(yīng)該是簡(jiǎn)潔的。例如變量名MaxVal 就比MaxValueUntilOverflow 好用。標(biāo)識(shí)符的長(zhǎng)度一般不要過長(zhǎng),較長(zhǎng)的單詞可通過去掉“元音”形成縮寫。
變量分為全局變量(定義在{ }外部,對(duì)全局生效的變量)和局部變量(定義在{ }內(nèi)部,對(duì)該{ }內(nèi)生效的變量),當(dāng)局部變量和全局變量名字沖突時(shí),遵循局部?jī)?yōu)先,但不建議寫成一樣的
注1:當(dāng)全局變量不進(jìn)行初始化時(shí),我們規(guī)定它為0,而局部變量不進(jìn)行初始化時(shí),我們會(huì)賦予其一個(gè)隨機(jī)值
注2:同一工程下的全局變量可跨源文件使用,但使用時(shí)需用extern聲明
4.常變量 1.const使用const修飾的變量,將變?yōu)橐粋€(gè)常變量(但它仍是一個(gè)變量),使其在全局生效,并且不可被再次修改。常用于:1.定義一個(gè)常用常數(shù)為全局變量,便于之后程序的修改(可以一次修改所有使用了這個(gè)常數(shù)的地方,而無需一處一處的尋找和修改);2.對(duì)循環(huán)內(nèi)部定義的局部變量,使其在每一次循環(huán)時(shí),都能接著上次循環(huán)而改變(其實(shí)這個(gè)也不常用(笑))
如:const int a=1e5+10;
2.define用define定義的常變量類似于定義某值為全局常變量(當(dāng)然也可定義于大括號(hào)內(nèi),作為局部變量)
如:#define a=10;
5.不同類型的互相賦值問題我們當(dāng)然可以把不同類型的變量互相賦值,也可以使用不同的輸出格式符打印,正如上面我把int 賦與unsigned long int 類型,并使用了不同的輸入輸出格式符打印一樣,但需要注意精度問題
#includeint main()
{
float a = -100.9;
int b = a;
unsigned c = -b;
printf("%d\n", b);
printf("%u\n", c);
return 0;
}
我們來猜測(cè)一下上面這個(gè)代碼段輸出的答案到底是多少呢?
答案是
你做對(duì)了嗎?如果對(duì)了,那證明你已經(jīng)基本理解了這里的內(nèi)容了,如果沒有,沒關(guān)系下面我們一起來看看吧
首先,我們定義了float型的變量a為-100.9,然后我們將其賦值與int類型的b,因?yàn)橛?jì)算機(jī)為向下取整,所以b被賦值為-100
然后我們將b賦值與unsigned int 類型的c,所以它以該類型打印出來,就為-100的絕對(duì)值,即為100
洛谷:這一節(jié)中我們講述的內(nèi)容偏向理論,本人沒有想到?jīng)]有什么特別適合新手嘗試的題目,故而我提供一個(gè)編程作業(yè)思路給大家,請(qǐng)大家編程創(chuàng)建多個(gè)不同類型的變量,然后將他們互相賦值并輸出,熟悉不同類型間的區(qū)別
下一節(jié)中,我將會(huì)向大家介紹C語言中的轉(zhuǎn)義字符是什么,并講解常用的幾種轉(zhuǎn)義字符。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧