網站首頁 語言 會計 網際網路計算機 醫學 學歷 職場 文藝體育 範文
當前位置:學識谷 > 計算機 > C語言

C語言中的整數

欄目: C語言 / 釋出於: / 人氣:1.93W

整數是程式設計中常用的一種資料,C語言使用int來定義整數。下面一起來看看!

C語言中的整數

首頁C語言教程C語言和記憶體多檔案程式設計例項精講專案實踐C++教程更多 首頁 / C語言入門教程 / 變數和資料型別 / C語言中的整數(short,int,long)

<上一節下一節>關注我們:微信新浪微博手機版網站

C語言中文網推出輔導班啦,包括「C語言輔導班、C++輔導班、演算法/資料結構輔導班」,全部都是一對一教學:一對一輔導 + 一對一答疑 + 佈置作業 + 專案實踐 + 永久學習。QQ線上,隨時響應!

整數是程式設計中常用的一種資料,C語言使用int來定義整數(int 是 integer 的簡寫),這在《大話C語言變數和資料型別》中已經進行了詳細講解。

現代作業系統中 int 一般佔用4個位元組記憶體,共計32位(Bit)。如果不考慮正負數,當所有的位都為1時它的值最大,為 232-1 = 4,294,967,295 ≈ 43億,這是一個很大的數,實際開發中很少用到,而諸如 1、99、12098 等較小的數使用頻率反而較高。

使用4個位元組儲存較小的整數綽綽有餘,會空閒出兩三個位元組來,這些位元組就白白浪費掉了,不能再被其他資料使用。現在個人電腦的記憶體都比較大了,配置低的也有2G,浪費一些記憶體不會帶來明顯的損失;而在C語言被髮明的早期,或者在微控制器和嵌入式中,記憶體都是非常稀缺的資源,所有的程式都在盡力節省記憶體。

反過來說,43億雖然已經很大,但要表示全球人口數量還是不夠,必須要讓整數佔用更多的記憶體,才能表示更大的值。

讓整數佔用更少的記憶體可以在 int 前邊加 short,讓整數佔用更多的記憶體可以在 int 前邊加 long,例如:

short int a = 10;

short int b, c = 99;

long int m = 102023;

long int n, p = 562131;

這樣 a、b、c 只佔用2個位元組的記憶體,而 m、n、p 可能佔用8個位元組的記憶體。

也可以將 int 省略,只寫 short 和 long,如下所示:

short a = 10;

short b, c = 99;

long m = 102023;

long n, p = 562131;

這樣的寫法更加簡潔,實際開發中常用。

總結起來,C語言中共有三種整數型別,分別是 short、int 和 long。int 稱為整型,short 稱為短整型,long 稱為長整型。

整數的長度

C語言並沒有嚴格規定 short、int、long 所佔用的位元組數,只做了寬泛的限制:

short 至少佔用2個位元組。

int 建議為一個機器字長。32位環境下機器字長為4位元組,64位環境下機器字長為8位元組。

short 的長度不能大於 int,long 的長度不能小於 int。

總結起來,它們的長度(所佔位元組數)關係為:

short <= int <= long

這就意味著,short 並不一定真的”短“,long 也並不一定真的.”長“,它們有可能和 int 佔用相同的位元組數。

在16位環境下,short 為2個位元組,int 為2個位元組,long 為4個位元組。16位環境多用於微控制器和低階嵌入式系統,在PC和伺服器上基本都看不到了。

對於32位的 Windows、Linux 和 OS X,short 為2個位元組,int 為4個位元組,long 也為4個位元組。PC和伺服器上的32位系統佔有率也在慢慢下降,嵌入式系統使用32位越來越多。

在64位環境下,不同的作業系統會有不同的結果,如下所示(長度以位元組計):

作業系統shortintlong
Win64244
類Unix系統(包括 Unix、Linux、OS X、BSD、Solaris 等)248

目前我們使用較多的PC系統為 Win XP、Win 7、Win 8、Win 10、Mac OS X、Linux,short 和 int 的長度都是固定的,分別為2和4,大家可以放心使用,long 的長度在 Win64 和類Unix系統下會有所不同,使用時要注意移植性。

獲取某個資料型別的長度可以使用 sizeof 操作符,如下所示:

#include int main(){ short a = 10; int b = 100; long c = 1000; char d = 'X'; int a_length = sizeof a; int b_length = sizeof(int); printf("a=%d, b=%d, c=%d, d=%d ", a_length, b_length, sizeof(c), sizeof(char)); return 0;}

在Win7下的執行結果為:

a=2, b=4, c=4, d=1

sizeof 用來獲取某個資料型別或變數所佔用的位元組數,如果後面跟的是變數名稱,那麼可以省略( ),如果跟的是資料型別,就必須帶上( )。

需要注意的是,sizeof 是C語言中的操作符,不是函式,所以可以不帶( ),後面會詳細講解。

不同進位制的整數

C語言中的整數除了可以使用十進位制,還可以使用八進位制和十六進位制。

1) 八進位制

八進位制由 0~7 八個數字組成,使用時必須以0開頭(注意是數字 0,不是字母 o),例如:

//合法的八進位制數int a = 015; //十進位制為 13int b = -0101; //十進位制為 -65int c = 0177777; //十進位制為 65535//非法的八進位制int m = 256; //無字首 0,相當於十進位制int n = 03A2; //A不是有效數字

2) 十六進位制

十六進位制由數字 0~9、字母 A~F 或 a~f 組成,使用時必須以0x或0X(不區分大小寫)開頭,例如:

//合法的十六進位制int a = 0X2A; //十進位制為 42int b = -0XA0; //十進位制為 -160int c = 0xffff; //十進位制為 65535//非法的十六進位制int m = 5A; //無字首 0Xint n = 0X3H; //H不是有效數字

3) 十進位制

十進位制由 0~9 十個數字組成,沒有任何字首,和我們平時的書寫格式一樣,不再贅述。

注意:C語言中只能使用八進位制、十進位制和十六進位制,不能直接使用二進位制,它沒有特定的字首。

各種整數的輸出

在使用 printf 輸出整數時,不同的控制字元會有不同的輸出格式。

1) 輸出 int 使用%d,輸出 short 使用%hd,輸出 long 使用%ld。請看下面的例子:

#include int main(){ short a = 100; int b = 010; long c = 0XFFFF; printf("a=%hd, b=%d, c=%ld ", a, b, c); return 0;}

執行結果:

a=100, b=8, c=65535

2) 輸出十進位制使用%d,輸出八進位制使用%o(注意是字母 o,不是數字 0),輸出十六進位制使用%x或%X。如果希望帶上字首,可以加#,例如 %#d、%#o、%#x、%#X。請看下面的例子:

#include #include int main(){ int a = 100, b = 0270, c = 0X2F; printf("a(d)=%d, d(#d)=%#d ", a, a); printf("a(o)=%o, d(#o)=%#o ", b, b); printf("c(x)=%x, c(#x)=%#x, c(X)=%X, c(#X)=%#X ", c, c, c, c); system("pause"); return 0;}

執行結果:

a(d)=100, d(#d)=100

a(o)=270, d(#o)=0270

c(x)=2f, c(#x)=0x2f, c(X)=2F, c(#X)=0X2F

需要注意的是,十進位制數沒有字首,所以 %d 和 %#d 的輸出結果一樣。

Tags:整數 語言