程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> C語言中的整數(short,int,long)

C語言中的整數(short,int,long)

編輯:C語言基礎知識
整數是編程中常用的一種數據,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位環境下,不同的操作系統會有不同的結果,如下所示(長度以字節計):
操作系統 short int long Win64 2 4 4 類Unix系統(包括 Unix、Linux、OS X、BSD、Solaris 等) 2 4 8
目前我們使用較多的PC系統為 Win XP、Win 7、Win 8、Win 10、Mac OS X、Linux,short 和 int 的長度都是固定的,分別為2和4,大家可以放心使用,long 的長度在 Win64 和類Unix系統下會有所不同,使用時要注意移植性。

獲取某個數據類型的長度可以使用 sizeof 操作符,如下所示:
#include <stdio.h>
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\n", 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;  //十進制為 13
int b = -0101;  //十進制為 -65
int c = 0177777;  //十進制為 65535

//非法的八進制
int m = 256;  //無前綴 0,相當於十進制
int n = 03A2;  //A不是有效數字

2) 十六進制

十六進制由數字 0~9、字母 A~F 或 a~f 組成,使用時必須以0x0X(不區分大小寫)開頭,例如:
//合法的十六進制
int a = 0X2A;  //十進制為 42
int b = -0XA0;  //十進制為 -160
int c = 0xffff;  //十進制為 65535

//非法的十六進制
int m = 5A;  //無前綴 0X
int n = 0X3H;  //H不是有效數字

3) 十進制

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

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

各種整數的輸出

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

1) 輸出 int 使用%d,輸出 short 使用%hd,輸出 long 使用%ld。請看下面的例子:
#include <stdio.h>
int main()
{
    short a = 100;
    int b = 010;
    long c = 0XFFFF;
    printf("a=%hd, b=%d, c=%ld\n", a, b, c);

    return 0;
}
運行結果:
a=100, b=8, c=65535

2) 輸出十進制使用%d,輸出八進制使用%o(注意是字母 o,不是數字 0),輸出十六進制使用%x%X。如果希望帶上前綴,可以加#,例如 %#d、%#o、%#x、%#X。請看下面的例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a = 100, b = 0270, c = 0X2F;
    printf("a(d)=%d, d(#d)=%#d\n", a, a);
    printf("a(o)=%o, d(#o)=%#o\n", b, b);
    printf("c(x)=%x, c(#x)=%#x, c(X)=%X, c(#X)=%#X\n", 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 的輸出結果一樣。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved