1. 程式人生 > >C語言整數的取值範圍

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)

作者:碼農有道

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