C語言為什麼要定義short,int,long這麼多整數類型?

Latsu


1.short,int,long不同的數據類型佔用的內存空間不同,short為2字節,int為2或4字節,long為4或8字節。

2.不同的整型數據類型根據編程的現實使用環境,使用的變量取值範圍不同,可以根據取值範圍大小選擇恰當的變量類型來節省內存空間的佔用。

3.在硬件資源並不充裕的環境,如嵌入式應用的開發,合理分配變量類型,將會充分發揮硬件性能,降低產品成本。


計算理論


您好,作為C語言的過來人,很高興能為您解惑釋疑。對於C語言為什麼要定義這麼多的整數類型,我覺得是因為計算機的需要,因為不同的計算機的內存及表示範圍需求不同,所以為了不浪費,不同的計算機機型就會使用不同的整數類型進行編程。


C語言的起源

跟人類的語言不同,計算機語言的發展史似乎沒那麼複雜,總的來說就是:機器語言 -> 彙編語言 -> 高級語言,而C語言便是一門面向過程的計算機高級語言,它創建於1972年,也是後來C++、JAVA等面向對象的計算機高級語言的前輩,它的創始人是Dennis MacAlistair Ritchie,非常牛逼的大師,縱使這麼多年過去了,C語言仍舊是歷久不衰,畢竟它可是最接近計算機的高級語言了,不可替代。


C語言的類型

C語言的數據類型眾多,一般分為四大類:基本類型、指針類型、構造類型、空類型(void),而每個類又會分為不同的類型,具體如下圖所示:


其中short、int、long 是C語言中常見的整數類型,int 稱為整型,short 稱為短整型,long 稱為長整型。int 是基本的整數類型,short 和 long 是在 int 的基礎上進行的擴展,short 可以節省內存,long 可以容納更大的值。


  • 在現代操作系統中,int 一般佔用 4 個字節(Byte)的內存,共計 32 位(Bit),如果不考慮正負數,當所有的位都為 1 時它的值最大,為 2^32-1 = 4,294,967,295 ≈ 43億,這是一個很大的數,實際開發中很少用到,而諸如 1、90、1098 等較小的數使用頻率反而較高,使用 4 個字節保存較小的整數綽綽有餘,因此會空閒出兩三個字節來,這些字節就白白浪費掉了,不能再被其他數據使用。


  • 現在隨著個人電腦的內存越來越大,配置低的也有 2G,浪費一些內存不會帶來明顯的損失,所以我們一般也不會感覺到什麼,但是在C語言被髮明的早期,或者在單片機和嵌入式系統中,內存都是非常稀缺的資源,所有的程序都在盡力節省內存,所以為了讓整數佔用更少的內存就會用short類型的整數表示。



  • 反過來說,雖然int類型表示的43億已經很大,但是要表示全球人口數量還是不夠,必須要讓整數佔用更多的內存,才能表示更大的值,比如佔用 6 個字節或者 8 個字節,所以為了讓整數佔用更多的內存來解決某些實際問題時,我們就可以用long類型的整數表示。


  • 類型表示範圍圖:


C語言實戰

上面已經完全把short、int、long等各種整型的表示方法做了一下完整的介紹和說明,下面為了證實一下,特意寫一個實例如下:

#include <stdio.h>
int main()
{
short a = 10;
int b = 100;
long c = 9437;
printf("a=%hd, b=%d, c=%ld\\n\

都市心聲


針對這個問題,首先就得要從計算機存儲數據開始說起吧!眾所周知計算機中存儲的最小單位為bit,存放的是二進制數也就是0和1。

每種數據類型的長度是不一樣的,比如int,它就是佔四個字節,而像double卻佔8個字節。

那麼引入數據類型一方面是限制人的操作,不以規矩,不成方圓。另一方面就是更容易理解,降低出錯率。


猿人生活


能表達整數的還不止這些,比如char,uchar,甚至bit類型都可以定義整數,區別是每個類型定義的整數範圍不一樣。這個跟處理器時代息息相關,本人上學那時接觸的是16位系統,int類型長度不是目前的4字節,而是2字節。

過去內存硬件資源緊張,容不得半點浪費,因為稍不注意就不夠用了。比如目前的單片機,雖然比十幾年前有了極大改進,但和pc的相比那就是天差地別的了。

另外人們在做通信協議的時候,如果數據傳輸頻率高,數據量大,就會考慮壓縮協議字段,儘可能的用最少字節,甚至最少位來定義數據項(比如bit:3就是3位表達,其值範圍是0~7)。

隨著64位處理器的出現,那麼long對應8字節整數也就好理解了,如果還有128位處理器,也會新增新的類型來與之對應。


碼中尋樂


作為dos時代過來的人表示,以前int就表示16位,然後進入windows時代,計算機並未完全拋棄16位dos. 甚至圖形界面還有一種色彩模式:16位深色彩。所以,16位數值還得繼續提供。

再進入安卓和ios時代, 16位顏色模式還在支持,甚至有的軟件還採用大量utf16編碼。這些都告訴你,16數值類型還有太多實際的應用場景。更何況,還有一大堆開源代碼以前寫了大量的short.

而int代表的32位數據更不用說了。

我覺得只有long這個類型,歷史遺留佔更多成分。


三袋大菠蘿


C語言是與硬件平臺最近的語言,充分考慮了硬件特性。

優點是:利用硬件特性,C語言執行效率高。

缺點是:跨平臺性不好,定義了數據類型,在個平臺上可以運行,換個平臺可能就有問題了。

辯證看問題,結合實際項目需求,我們選擇利用它的優點。


china傳統文化


int 簡單一點說就是表示範圍的大小,short < int < long,不過一般都習慣用int,

short的位置99可以用int代替,當然也可以用long代替,只不過int已經能滿足一般使用,9位數。再大了就得用long行或者I64int了


沉默的風鈴


簡單來說,一句話就是,為了區分內存分配的大小並保持指針操作一致性和簡單化,事實上c語言只要一種數據類型就是char就夠了,其它任何類型都可以當作是它的別名用於區分長度,避免指針操作位移操作上的問題和難度


飛虎出征擊長空


因為不同的變量有不同的size. 比如用於表示一個字母的個數,那麼定義一個short類型的就可以了,節省空間。如果一個變量用於表示世界人口數,那麼得定義一個long型的。


Nemo說電影


每個基本類型都有自己的作用,例如整形中int short long ,區別就是他們所佔的內存大小以及可以存放的數據大小,shoot_125~+125,而int範圍就比較大了有幾萬,其餘就不說了

/<stdio.h>


分享到:


相關文章: