C語言整數的取值範圍
- 1、整數的取值範圍
- 2、版權宣告
整數是我們生活中常用的資料型別,也是程式設計中常用的一種資料,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)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!