C/C++資料類型(網上資料總結)

來源:互聯網
上載者:User

1. c語言中的整數類型有char, short, int, long等幾種, 下面是C語言對每種資料類型長度的規定:
(a). short和long類型的長度不相同
(b). int類型通常同具體機器的物理字長相同
(c). short通常是16bits, int通常是16bits or 32bits每種編譯器可以根據硬體的不同自由確定, 但是short和int必須最少是16bits, 而long類型必須最少是32bits, 並且short必須比int和long類型要短。
2. sizeof() 運算子返回的是一種資料類型中所包含的位元組數(bytes), AnsiC規定sizeof(char)必須返回1,當sizeof作用於數組時, 返回的是數組中所有成員所佔的位元組數(注意並不是數組中成員的個數), 當sizeof()作用於結構體和公用體時,返回的不僅僅是資料成員總的位元組數, 還包括編譯器為了實現位元組對其而填充的那些位元組。

---------------------------------------------------------------------------------------------------------------------------------------------

C++資料類型長度問題:
一、位元組和字長
位元組,八位就是一個位元組,是固定概念。字長是指電腦一次能處理的位元據的長度,是一個非固定的概念。例如,8位電腦的字長為8,即一個位元組, 32位電腦的字長位32,即4個位元組,同理,64位電腦的字長為64,即8位元組。
二、C++中的資料類型
1、字元型資料char,該類型始終是一個位元組長,即8位。
2、整形int、短整型short和長整形long。通常int為一個字長,short為半個字長,long為一個或2個字長(在32位機器中為一個字長)。
3、浮點型float、雙精確度double、和長雙精確度long double,分別表示單精確度浮點數 雙精確度浮點數和擴充精度的浮點數值。典型情況下,float 為一個字,double是兩個字,long double為兩個或三個或四個字。

 

 

char,short,int和long類型分別有多長?
    其長度分別為一位元組,至少兩位元組,至少兩位元組和至少4位元組。除此之外,不要再依賴任何約定。
    char類型的長度被定義為一個8位位元組,這很簡單。
    short類型的長度至少為兩位元組。在有些電腦上,對於有些編譯器,short類型的長度可能為4位元組,或者更長。
    int類型是一個整數的“自然”大小,其長度至少為兩位元組,並且至少要和short類型一樣長。在16位電腦上,int類型的長度可能為兩位元組;在32位電腦上,可能為4位元組;當64位電腦流行起來後,int類型的長度可能會達到8位元組。這裡說的都是“可能”,例如,早期的Motorala 68000是一種16/32位的混合型電腦,依賴於不同的命令列選項,一個68000編譯器能產生兩位元組長或4位元組長的int類型。
    long類型至少和int類型一樣長(因此,它也至少和short類型一樣長)。long類型的長度至少為4位元組。32位電腦上的編譯器可能會使short,int和long類型的長度都為4位元組——也可能不會。
    如果你需要一個4位元組長的整型變數,你不要想當然地以為int或long類型能滿足要求,而要用typedef把一種固有的類型(一種確實存在的類型)定義為你所需要的類型,並在它的前後加上相應的#ifdef指令:
    #ifdef FOUR_BYTE_LONG
    typedef long int4;
    #endif
    如果你需要把一個整型變數以位元組流的方式寫到檔案中或網路上,然後再從不同的電腦上讀出來,你可能就會用到這樣的類型(如果你要這樣做,請參見15.5)。
    如果你需要一個兩位元組長的整型變數,你可能會遇到一些麻煩!因為並不一定有這樣的類型。但是,你總是可以把一個較小的值存放到一個由兩個char類型組成的數組中

 

 

C語言中的整數資料型別 int、short int 和 long int

一、表示範圍,佔用空間

標準規定,int 的表示範圍不能小於 short 的表示範圍,long 的表示範圍不能小於 int 的表示範圍。這就是說 short 型變數佔用的空間可能比 int 型變數少,而 long 型變數佔用的空間可能比 int 型變數多。

16 位(bit)的電腦中,int 和 short 一般都是 16 位,而 long 是 32 位;

32 位(bit)的電腦中,short 一般是 16 位,而 long 和 int 是 32 位。TC2(16位的編譯器)中,int 是 16 位的;而 Dev-C++(32 位的編譯器)中,int 是 32 位的。

二、16 位(bit)的編譯環境下:

 

名稱

全稱類型說明符 縮寫類型說明符       位元                     範圍
整型 int int 16位      -32768至+32767
無符號整型 unsigned int unsigned 16位 0 至 65,535
短整型 short int short 16位 -32768至+32767
無符號短整型      unsigned short int   unsigned short 16位 0 至 65,535
長整型 long int long 32位 -2,147,483,648 至 2,147,483,647
無符號長整型      unsigned long int      unsigned long         32位     0至4,294,967,295

三、C語言中整型 常量 有三種不同的表示形式:

     1、八進位整型常量:在八位元值前面加首碼“0”,其數位取值為0~7。例如:054、0567、05421。

     2、十六進位整型常量:首碼為“0X”或“0x“,其數位取值為0~9、A~F 或 a~f。例如:0X3D、0XE0、0xfff等。

     3、十進位整型常量:既無首碼也無尾碼。例如:254、745、890等。 如將儲存為long類型,需要在數字序列最後附一個字母L 或 l 作為尾碼。例如:245L、7850L、124l等

 

四、整數類型的選擇

如果您要處理的只是非負整數,那麼應該優先使用 unsigned 打頭的那些整數類型。如果您要處理的整數超出了 int 所能表示的範圍,並且您的編譯器中,long 的表示範圍比 int 大,那就使用 long。不過,若非必要,盡量不要用 long,因為它 可能會降低程式運行效率。有一點要注意:如果您的編譯器中,long 和 int 都是 32 位的,並且您需要使用 32 位整數,那麼應該用 long,而不要用 int。只有這樣,我們的程式才可以安全地移植到 16 位的電腦,因為 16 位的電腦中,int 一般也是 16 位的。類似地,如果您需要使用 64 位元整數,那就用 long long。如果 int 是 32 位的話,那麼使用 short 可以節省空間的,不過您得確保您要處理的整數不會超出 short 的表示範圍。這種“節省”對記憶體大的電腦來說,是沒什麼意義的。

五、long 型常量和 long long 型常量
一般來說,整數常量是被當作 int 類型來儲存的。如果我們使用的整數常量超出了 int 的表示範圍,C 語言規定編譯器自動使用 unsigned int 來處理這個常量。如果 unsigned 也不足以表示這個常量的話,編譯器就會用 long。如果還表示不了的話,那就依次用 unsigned long,long long,unsigned long long。如果 unsigned long long 也表示不了,那麼編譯器就沒轍了。注意:long long 和 unsigned long long 是 C99 特有的。例如:如果 int 是 16 位的話,它就表示不了常量 1000000。編譯器會使用 long 來處理這個常量,因為 unsigned int 也表示不了 1000000 。
同樣,十六進位和八進位整數常量通常也是被作為 int 來處理。但是,當我們使用的常量超出了 int 的表示範圍後,編譯器會依次使用unsigned int,long,unsigned long,long long 和 unsigned long long。直到所使用的類型足以表示那個常量為止。
有時,我們使用的是較小的常量,但是我們希望這個常量被當作 long 來處理,這就需要在這個常量後面加上尾碼 l(小寫字母 l)或者 L(大寫字母 L)。我們應該避免使用 l ,因為 l 容易和數字 1 混淆。例如:整數常量 7 是被作為 int 來處理的,但整數常量 7L(或者 7l)是被作為 long 來處理的。類似地,在整數常量後面加上尾碼 ll 或者 LL ,這個常量就會被當作 long long 來處理。例如:3LL 。如果想使用不帶正負號的整數常量的話,還要配合使用尾碼 u 或者 U 。例如:2u,3U,4Lu,5ul,6LU,7LLU,8Ull,9uLL 。
這些尾碼也可以用於十六進位和八進位整數常量。例如:020L,010LL,0x30uL,0x40ull 。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.