C語言整數的取值範圍

2021-10-04 23:14:34 字數 1885 閱讀 9656

整數是我們生活中常用的資料型別,也是程式設計中常用的一種資料,c語言使用int關鍵字來定義整數變數(int是 integer 的簡寫)。

在定義變數的時候,可以加signed、unsigned、short和long四種修飾符。

signed:有符號的,可以表示正數和負數。

unsigned:無符號的,只能表示正數,例如陣列的下標、人的身高等。

short:短的,現在主流的64位作業系統下,整數占用記憶體4個位元組,使用 4

個位元組儲存較小的整數綽綽有餘,會空閒出兩個位元組來,這些位元組就白白浪費掉了。在c語言被發明的早期,或者在微控制器和嵌入式系統中,記憶體都是非常稀缺的資源,所有的程式都在盡可能節省記憶體。

long:長的,更長的整數。

整數的取值範圍與計算機作業系統和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,此程式演示整數占用記憶體的大小和取值範圍。

*/#include

intmain()

執行效果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,記憶體不是問題,程式的穩定高於一切。

C語言整數的取值範圍

整數是我們生活中常用的資料型別,也是程式設計中常用的一種資料,c語言使用int關鍵字來定義整數變數 int是 integer 的簡寫 在定義變數的時候,可以加signed unsigned short和long四種修飾符。signed 有符號的,可以表示正數和負數。unsigned 無符號的,只能表...

整數的取值範圍

在大學裡面學習計算機組成原理的時候,經常搞不懂一些數的取值範圍到底是怎麼得來的,比如有的整數的取值範圍是 32768 32767,為什麼負數和正數不對稱呢?到現在自己還是很迷糊,故查閱了一些資料,現在說明一下 整型的寬度是乙個字 編譯器不同,整數的取值範圍也不同,有的編譯器整數是4個位元組 也就是2...

C語言 取值範圍

列印型別 u8 ds8 du16 d or hu s16 d or hd u32 us32 du64 llu s64 lld int dunsigned int ushort int d or hd long ldunsigned long lulong long lld unsigned long...