整數是我們生活中常用的數據類型,也是編程中常用的一種數據,C語言使用int關鍵字來定義整數變量(int是 integer 的簡寫)。
在定義變量的時候,可以加signed、unsigned、short和long四種修飾符。
signed:有符號的,可以表示正數和負數。
unsigned:無符號的,只能表示正數,例如數組的下標、人的身高等。
short:短的,現在主流的64位操作系統下,整數占用內存4個字節,使用 4
個字節保存較小的整數綽綽有余,會空閑出兩個字節來,這些字節就白白浪費掉了。在C語言被發明的早期,或者在單片機和嵌入式系統中,內存都是非常稀缺的資源,所有的程序都在盡可能節省內存。
long:長的,更長的整數。
1、整數的取值范圍
整數的取值范圍與計算機操作系統和C語言編譯器有關,沒有一個固定的數值,我們可以根據它占用的內存大小來推斷它的取值范圍。
一個字節有8個位,表示的數據的取值范圍是28-1,即255。
如果占用的內存是兩個字節,無符號型取值范圍是28ⅹ28-1。
如果占用的內存是四個字節,無符號型取值范圍是28ⅹ28ⅹ28ⅹ28-1。
如果占用的內存是八個字節,無符號型取值范圍是28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28-1。
如果是有符號,取值范圍減半,因為符號占一個位。
下面用一個示例代碼來測試各種整數占用內存的大小。
示例(book60.c)
/*
* 程序名:book60.c,此程序演示整數占用內存的大小和取值范圍。
* 作者:C語言技術網(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
int main()
{
short si; // 短整數
int ii; // 整數
long li; // 長整數
printf("sizeof short is %d\n",sizeof(short));
printf("sizeof int is %d\n",sizeof(int));
printf("sizeof long is %d\n",sizeof(long));
}
運行效果
sizeof是C語言中保留關鍵字,是一種運算符,不是函數,sizeof實際上是獲取了數據在內存中所占用的存儲空間,以字節為單位。
int ii; // sizeof(int)和sizeof(ii)都可以。
根據book60.c的測試結果,我們可以得到各種整數的取值范圍。
類型簡寫 | 類型全稱 | 長度 | 取值范圍 |
---|---|---|---|
short | [signed] short [int] | 2字節 | -32768~32767 |
unsigned short | unsigned short [int] | 2字節 | 0~65535 |
int | [signed] int | 4字節 | -2147483648~2147483647 |
unsigned int | unsigned [int] | 4字節 | 0~4294967295 |
long | [signed] long [int] | 8字節 | -9223372036854775808~ 9223372036854775807 |
unsigned long | unsigned long [int] | 8字節 | 0~18446744073709551615 |
注意:
1)計算機用最高位1位來表達符號,unsigned修飾過的正整數不需要符號位,在表達正整數的時候比signed修飾的正整數取值大一倍。
2)在寫程序的時候,上表中括號[]的單詞可以省略不書寫。
3)在寫程序的時候,給整數變量賦值不能超出變量的取值范圍,編譯的時候會出現類似以下的錯誤,程序運行也可能產生不可預后的后果。
4)現在計算機的內存不值錢,建議程序員少用short,慎用int,多用long,內存不是問題,程序的穩定高於一切。
2、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!