-
1 # 都市心聲
-
2 # 三袋大菠蘿
作為dos時代過來的人表示,以前int就表示16位,然後進入windows時代,計算機並未完全拋棄16位dos. 甚至圖形介面還有一種色彩模式:16位深色彩。所以,16位數值還得繼續提供。
再進入安卓和ios時代, 16位顏色模式還在支援,甚至有的軟體還採用大量utf16編碼。這些都告訴你,16數值型別還有太多實際的應用場景。更何況,還有一大堆開原始碼以前寫了大量的short.
而int代表的32位資料更不用說了。
我覺得只有long這個型別,歷史遺留佔更多成分。
-
3 # 光輝燦爛照耀遠方
c語言跟硬體密切相關,最終編譯成機器碼,不同型別的變數佔據的空間不一樣,操作速度也不一樣,這是為了節省空間,提高效率
-
4 # 隔壁老西工
我們先必須要了解,在C語言中, 資料型別構成資料元素儲存的語義和特徵,它們以語言語法的形式表示為記憶體位置或變數的宣告,資料型別還確定資料元素的操作或處理方法的型別。首先從最基礎的開始,相信耐心看到後面你會完全明白。
二進位制表示資料首先我們最熟悉的就十進位制,假如要表示8這個數字,在十進位制內就直接是8。而在計算機裡面的數字全部是由二進位制表示(即0,1),如果我們要表示十進位制的資料:
8表示為1000,9表示為1001,127表示為1111111
這裡2進位制到8進位制的換算比較簡單,這裡不再贅述。我們稱每個二進位制位叫1 bit,那麼1000就是4位(bit),用小寫b表示,1111111就是7位。而在計算機中表示資料,最小的單位就是8位,1個8位二進位制資料我們稱為1個位元組,位元組就是一個空間佔用的單位。如同我們生活中的計價單位,比如你家這個月用了多少立方米的天然氣。位元組單位用大寫的B表示。
計算機儲存單位換算我們可以看到下面的單位換算:
1 Byte(B) = 8 bit
1 Kilo Byte(KB) = 1024B
1 Mega Byte(MB) = 1024 KB
1 Giga Byte (GB)= 1024 MB
1 Tera Byte(TB)= 1024 GB
1 Peta Byte(PB) = 1024 TB
1 Exa Byte(EB) = 1024 PB
1 Zetta Byte(ZB) = 1024 EB
1Yotta Byte(YB)= 1024 ZB
1 Bronto Byte(BB) = 1024 YB
1Nona Byte(NB)=1024 BB
1 Dogga Byte(DB)=1024 NB
1 Corydon Byte(CB)=1024DB
這裡最容易混淆的就是MB和Mb這兩個單位,1MB=8Mb一定要看清楚,很多時候會玩這種文字遊戲。
C語言基本資料型別C語言提供了四個基本的算術型別說明符char,int,float和double,以及修飾符signed,unsigned,short和long。其中char是最小單位1位元組,8位。下面的表格列出了特定的組合以及資料的表示範圍:
資訊來自維基百科
為什麼會有這麼多資料型別?我們有了前面的基礎就能明白:
1、資料型別是可以讓你在程式設計中至少你正在操作哪種資料型別,是float還是char。這些是為了讓C語言的編譯器在編譯的工程中知道這些資訊,從而避免程式在執行的時候出現各種問題,比如表示範圍越界,錯誤使用了型別等等。(通常我們稱C/C++這類叫強型別語言,而javascript,python等指令碼語言都是弱型別,可以關注我或私信深入探討)
2、計算機通常會操作大量的資料,選擇合適的資料型別,可以節約儲存,提升效率。舉一個例子來說,如果你的操作的資料都是在0~65535範圍類,你完全可以選擇用unsigned short來儲存,這樣會比int節約50%的儲存空間,特別在海量資料的情況下。
回覆列表
跟人類的語言不同,計算機語言的發展史似乎沒那麼複雜,總的來說就是:機器語言 -> 組合語言 -> 高階語言,而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", a, b, c); return 0;}執行結果為:a=10, b=100, c=9437
總結現在我們知道了C語言之所以定義short,int,long這麼多型別來表示整數,其一是為了節省記憶體,滿足不同記憶體大小的機器,其二是為了能夠容納表示更大的值,滿足特殊需求的情況,C語言的世界豐富多彩,每一種型別的存在都會有它存在的理由和價值,只要懷著好奇的心,總會找到令我們欣喜的答案。