適合初學(xué)者的C語(yǔ)言數(shù)據(jù)類型的講解
之前說(shuō)過(guò)寫代碼是為了解決生活中的問(wèn)題,比如購(gòu)物。
假設(shè)我們要買一本書,它的價(jià)格是10.5,是個(gè)小數(shù),也可以是一個(gè)整數(shù)10,它的書名是鋼鐵是怎樣煉成的,是一組字符串,就像svli@gikvw這些,里面每個(gè)稱為字符。
我們要去用c語(yǔ)言來(lái)去存儲(chǔ)這些信息呢,在c語(yǔ)言里面為了能夠描述這些類型。
就把小數(shù)抽象出來(lái)一個(gè)數(shù)據(jù)類型,叫浮點(diǎn)型
把整數(shù)抽象出來(lái)一個(gè)數(shù)據(jù)類型,叫整型(就是上一個(gè)博客里面的int)
把字符抽象出來(lái)一個(gè)數(shù)據(jù)類型,就叫字符
10.5 - 小數(shù) - 浮點(diǎn)型
10 - 整數(shù) - 整型
A - 字符 - 字符
那么c語(yǔ)言里面抽象出來(lái)哪些數(shù)據(jù)類型呢?
char //字符數(shù)據(jù)類型
short //短整型
int //整型
long //長(zhǎng)整型
long long //更長(zhǎng)的整型
float //單精度浮點(diǎn)數(shù)
double //雙精度浮點(diǎn)數(shù)
//浮點(diǎn)型 10.5
//整型 10
//字符 A
看了上面的數(shù)據(jù)類型,很容易看出來(lái)下面的關(guān)系:
為什么叫浮點(diǎn)數(shù)?
就像66.6和6.66*10,小數(shù)點(diǎn)是可以浮動(dòng)的,所以叫浮點(diǎn)數(shù)
那么,為什么會(huì)有上面這么多的類型呢?我們就需要先回答一下下面這個(gè)問(wèn)題:
每一種類型的大小是多少?
我們等一下用代碼問(wèn)一下他們各自的大小
先了解一下新的東西
#include<stdio.h> int main() { printf("%d\n",100)// return 0;}
這個(gè)%d指的是打印(輸出)的格式,即整型,后面的100是返回值,即打印的是100,\n的意思就像enter,空行的意思,如圖:
運(yùn)行結(jié)果:
100
現(xiàn)在來(lái)解釋一下\n的作用,這里用兩組代碼來(lái)對(duì)比一下:
第一組
#include<stdio.h> int main() { printf("%d\n",100)// printf("%d\n",100) printf("%d\n",100) return 0;}
運(yùn)行的結(jié)果:
100
100
100
第二組
#include<stdio.h> int main() { printf("%d",100)// printf("%d",100) printf("%d",100) return 0;}
運(yùn)行的結(jié)果:
100100100
可以看出,\n的作用就是空一行,就是平時(shí)enter的作用
接下來(lái)就是
#include<stdio.h> int main() { printf("%d ", sizeof(char)); printf("%d ", sizeof(short)); printf("%d ", sizeof(int)); printf("%d ", sizeof(long)); printf("%d ", sizeof(long long)); printf("%d ", sizeof(float)); printf("%d ", sizeof(double)); return 0; }
運(yùn)行結(jié)果:
1 2 4 4 8 4 8
(那么這些數(shù)字的含義是什么?它們又是怎么來(lái)看出所占內(nèi)存的大小呢?我們等一會(huì)兒就來(lái)解釋。)
這里的sizeof()的作用就是返回?cái)?shù)據(jù)類型中的char在內(nèi)存中所占的大小,通俗點(diǎn)就是用它來(lái)告訴你char這個(gè)數(shù)據(jù)類型占多少內(nèi)存
不過(guò)這里用%d不太合適,在一些的編譯器里面會(huì)報(bào)警告,我們用%zu最合適,sizeof的返回值要用%zu來(lái)打印。
int main() { printf("%zu\n", sizeof(char)); printf("%zu\n", sizeof(short)); printf("%zu\n", sizeof(int)); printf("%zu\n", sizeof(long)); printf("%zu\n", sizeof(long long)); printf("%zu\n", sizeof(float)); printf("%zu\n", sizeof(double)); return 0; }
結(jié)果跟上面那個(gè)圖是一樣的,運(yùn)行結(jié)果是:
1
2
4
4
8
4
8
(我里面加了\n,所以是一排一排的)
接著我們來(lái)講上面那些數(shù)字的含義,
你只看到了它們這些數(shù)字,但沒(méi)有單位,其實(shí)它們都是有單位的,這里我們就來(lái)了解一下計(jì)算機(jī)的單位:
計(jì)算機(jī)的單位從大到小就是PB,TB,GB,MB,KB,byte。就像我們平時(shí)生活中用的流量,一般開(kāi)通的套餐只到GB,所以GB,MB,KB這些我們都已經(jīng)很熟悉了,下面就是各單位間的換算
1Pb=1024Tb
1Tb=1024Gb
1Gb=1024Mb
1Mb=1024kb
1kb=1024byte(字節(jié))
1byte=8bit(比特位)
看到這些,你可能對(duì)這些沒(méi)有什么概念,我們?cè)賮?lái)進(jìn)一步了解一下
我們都知道計(jì)算機(jī)使用的是二進(jìn)制語(yǔ)言,而我們生活在十進(jìn)制的世界,
來(lái)給一個(gè)空間| |,里面可以填1或0就是|1|或|0|,這就是一個(gè)bit,對(duì)應(yīng)的就是燈亮和燈滅
那么一個(gè)字節(jié)byte呢?
|1| |0| |1| |0| |0| |1| |0| |1|占了8個(gè)空間,也就是8個(gè)bit
10100101 對(duì)應(yīng)的十進(jìn)制就是 165
一個(gè)字節(jié)能儲(chǔ)存多大的數(shù)字呢?
11111111 對(duì)應(yīng)的十進(jìn)制就是255,即最多可以儲(chǔ)存2^8-1這么大的數(shù)
我們可以感受到越到后面的單位大小越龐大
解釋完計(jì)算機(jī)的單位,我們就來(lái)回到上面的1 2 4 4 8 4 8,它們的單位都是字節(jié)
char對(duì)應(yīng)1字節(jié),可以開(kāi)辟一個(gè)能儲(chǔ)存2^8-1的空間
short對(duì)應(yīng)2字節(jié),可以開(kāi)辟一個(gè)能儲(chǔ)存2^16-1的空間
int對(duì)應(yīng)4字節(jié),可以開(kāi)辟一個(gè)能儲(chǔ)存2^32-1的空間
long long對(duì)應(yīng)8字節(jié),可以開(kāi)辟一個(gè)能儲(chǔ)存2^64-1的空間
里面的float和double是來(lái)存儲(chǔ)小數(shù)的,雙精度浮點(diǎn)數(shù)比單精度浮點(diǎn)數(shù)精度要高一點(diǎn),這個(gè)在以后的博客會(huì)更加深入的去講解
但是我們看到int和long為什么都是4呢?
C語(yǔ)言規(guī)定,sizeof(long)>=sizeof(int)
就行,但不會(huì)超過(guò)sizeof(long long)
那么我們回到前面提出的問(wèn)題,為什么要規(guī)定這樣的數(shù)據(jù)類型呢,答案是節(jié)省空間:
給你一個(gè)數(shù)2,你要把它存起來(lái),你用了long long這個(gè)數(shù)據(jù)類型,開(kāi)辟了能儲(chǔ)存2^64-1的空間來(lái)放這個(gè)2,是不是有點(diǎn)大材小用了,用一個(gè)char就行了,提高空間的利用率
接下來(lái)我們來(lái)解釋一下下面的代碼,來(lái)引入下一個(gè)博客講的變量和常量
#include<stdio.h> int main() { int age=18; double weight=16.5; return 0; }
int age=18;
向內(nèi)存申請(qǐng)一個(gè)int大小的空間,來(lái)把18這個(gè)數(shù)據(jù)放在age這個(gè)變量里面,通俗一點(diǎn)就是,int要了一個(gè)房間,起名為age(隨便起名),把18放到了里面。
double weight=16.5;
這個(gè)像上面一樣,double是數(shù)據(jù)類型,weight是個(gè)變量,16.5是個(gè)小數(shù)
這些數(shù)據(jù)類型就是來(lái)定義變量的
到此這篇關(guān)于適合初學(xué)者的C語(yǔ)言數(shù)據(jù)類型的講解的文章就介紹到這了,更多相關(guān)C語(yǔ)言 數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的掃雷游戲
掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會(huì),幾次調(diào)試之后,發(fā)現(xiàn)這個(gè)比三子棋要復(fù)雜一些,尤其是空白展開(kāi)算法上和堵截玩家有的一拼,與實(shí)際游戲差別較大,不能使用光標(biāo),下面來(lái)詳解每一步分析2021-10-10C語(yǔ)言指針與引用的區(qū)別以及引用的三種用法案例詳解
這篇文章主要介紹了C語(yǔ)言指針與引用的區(qū)別以及引用的三種用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09C++在成員函數(shù)中使用STL的find_if函數(shù)實(shí)例
這篇文章主要介紹了C++在成員函數(shù)中使用STL的find_if函數(shù)實(shí)例,包括了STL中find_if函數(shù)的具體用法及相關(guān)的完整實(shí)例,非常具有參考借鑒價(jià)值,需要的朋友可以參考下2014-10-10C++ opencv實(shí)現(xiàn)的把藍(lán)底照片轉(zhuǎn)化為白底照片功能完整示例
這篇文章主要介紹了C++ opencv實(shí)現(xiàn)的把藍(lán)底照片轉(zhuǎn)化為白底照片功能,結(jié)合完整實(shí)例形式詳細(xì)分析了C++使用opencv模塊進(jìn)行圖片轉(zhuǎn)換操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-12-12C語(yǔ)言中變量與其內(nèi)存地址對(duì)應(yīng)的入門知識(shí)簡(jiǎn)單講解
這篇文章主要介紹了C語(yǔ)言中變量與其內(nèi)存地址對(duì)應(yīng)的入門知識(shí)簡(jiǎn)單講解,同時(shí)這也是掌握指針部分知識(shí)的基礎(chǔ),需要的朋友可以參考下2015-12-12