C語言整數的取值範圍


整數是我們生活中常用的數據類型,也是編程中常用的一種數據,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)

作者:碼農有道

如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章