tft每日頭條

 > 生活

 > c語言中整型數據的範圍

c語言中整型數據的範圍

生活 更新时间:2024-11-23 01:44:11

整型數值在C語言中表示整數,包含正數、零和負數,比如正數100,0和負數-100,數學中整數的範圍可以無窮大或無窮小,但C語言所提供的内置整型數值範圍是受限制的,C語言對整數範圍的設定是通過修飾符來實現,默認情況下,int整型數值表示一個有符号類型的數值,即它可以是負數、0或者是正數。如果我們通過添加特定的修飾符,那麼就可以調整這個整型變量的數值範圍。由于C語言并沒有限定整型類型為特定大小(下文會介紹變量大小的概念),這個特性與編譯器或程序所運行的操作系統有關,我們将以64位Windows平台下微軟的C編譯器為例進行介紹整型數值的支持範圍。

在介紹整型數值的範圍之前,我們先學習一個新的操作符---sizeof,這個操作符可以計算一個變量或類型(不僅僅是整型變量,其它的變量也是可以的)的大小,變量大小的概念準确地說應該是這個變量在内存中所占據的空間大小,以字節為單位進行衡量。sizeof操作符支持兩種類型的參數:一種是直接傳入變量的名稱,另一種是傳入一個類型标識。二者的用法有所不同,如果是變量類型,可以采用如下代碼獲取這個變量的大小

sizeof(variableName);

sizeof variableName;

但是,如果sizeof的操作數是一個類型标識,比如int,那麼,獲取這個類型大小的方法為

sizeof (int);下面通過代碼演示sizeof操作符的用法

c語言中整型數據的範圍(C初級.整型數值)1

圖1

圖1代碼中第6行代碼定義了一個int整型變量value,第8行代碼通過sizeof獲取變量value的大小(不是value存儲的數值),sizeof對于變量操作數是不需要括号的;第9行代碼通過sizeof獲取int類型所占據内存空間大小,這種情況下sizeof必須使用括号進行處理,否則編譯器會給出語法錯誤提示。

代碼第8行和第9行printf函數的第一個參數使用了一個新的轉換符%llu,這個轉換符的含義是:輸出unsigned long long類型的數值。sizeof操作符的求值結果正是unsigned long long(嚴格地說,sizeof求值的類型為size_t,它是unsinged long long的一個别名而已)。這兩行代碼程序輸出兩個值都為4,表示int類型在内存中占據的空間大小為4個字節。

上文提到可以通過修飾符實現數值範圍的調整,C語言對于整型數值提供的修飾符包括:short,long,unsigned,signed等,接下來我們演示下各個修飾符對變量空間占用的影響。對于short和long修飾符,C語言遵循如下規則:short int類型占用的空間大小不超過int,int類型占用的空間大小不超過long int。使用如下代碼演示short和long對整型數值範圍的影響

c語言中整型數據的範圍(C初級.整型數值)2

圖2

代碼第14行輸出為2,第15行輸出為4,表示short類型的變量和long類型的變量分别在内存中占據2個字節和4個字節,與無修飾符相比,sizeof(short)小于sizeof(int),sizeof(long)大于等于sizeof(int),通常short int和long int整型類型的變量類型可以簡寫為short和long。

整型變量在内存中占據的空間大小确定之後,它所能夠表示的整數個數也就确定了,但其表示的整數範圍與是否支持符号(正或負)而不同,比如有符号的整型變量所表示的最大數與無符号的整型變量表示的最大數值是不同的。

c語言中整型數據的範圍(C初級.整型數值)3

圖3

圖3代碼中使用了limits.h标準庫中的宏定義SHRT_MIN,SHRT_MAX和USHRT_MAX,因此在代碼中需要加入#include <limits.h>代碼。對于有符号變量,最小值為負值2的15次方,最大值為正數2的15次方減1,分别對應SHRT_MIN和SHRT_MAX;對于無符号變量,最小值為0,最大值為2的16次方減1,對應USHRT_MAX。按照同樣的方法,可以顯示出int、unsigned int、long int、unsigned long int的最大值和最小值。表1列出了64位Windows平台環境下使用微軟C編譯器構建的程序各個整型類型的最大值和最小值。

類型

最大值

最小值

short int

32767

-32768

unsigned short int

65535

0

int

2147483647

-2147483648

unsigned int

4294967295

0

long int

2147483647

-2147483648

unsigned long int

4294967295

0

表1

對于有符号整數和無符号整數,printf和scanf采用了不同的轉換符,有符号整數使用轉換符%d,而無符号整數則采用的是%u轉換符,在進行整數輸出或輸入時,轉換符與其對應的整型變量類型一定要保持一緻,否則會出現錯誤的結果。再通過下面的代碼展示二者的用法。

c語言中整型數據的範圍(C初級.整型數值)4

圖4

代碼第29行輸出的内容為無符号整數,printf使用了轉換符%u,第32行代碼則使用了%d,輸出有符号整數。第31行通過signed修飾符顯式地指明income是一個有符号int類型的變量,而第33行代碼,則省略了signed修飾符,默認情況下,如果int不指定符号修飾符,那麼就認為是一個有符号整數,通常我們可以省略這個signed修飾符。

至此,C語言中的整型類型的數值我們已經做了詳細的介紹,用戶可以根據實際數值的範圍選擇不同的修飾符進行類型設定。在對于資源空間占用比較嚴格且滿足需求的前提下,可以選擇類型大小較小的類型,以減少不必要的空間浪費;如果沒有特殊要求,使用int類型的整型數值即可;對于需要表示較大的數值時,可以選擇long int的整型數值。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved