通常,在運用不同程式語言編寫程式**過程中,我們也許都將遇到資料型別長度確認的問題,有時也關係著程式結構或者演算法思路解析的過程,稍有記憶模糊或者記憶出錯都將導致**除錯與程式編譯出錯。因此,熟悉掌握與分辨出不同編譯器下不同資料型別的實際長度十分重要。下面便是進一步說明。
對於資料型別長度的掌握需分清兩個方面的內容:
一、程式編譯器識別
這裡指的是**源程式實際在執行過程中所用到的編譯器,資料型別的實際長度由編譯器在編譯期間決定。因為在不同的平台下不同資料型別被分配的位元組數是不同的,主要包括三個方面的含義,涉及:cpu、os和complier。
cpu,即**處理器,主要包括運算器(算術邏輯運算單元,alu,arithmetic logic unit)和高速緩衝儲存器(cache)及實現它們之間聯絡的資料(data)、控制及狀態的匯流排(bus)。它與內部儲存器(memory)和輸入/輸出(i/o)裝置合稱為電子計算機三大核心部件。它包括包括運算邏輯部件、暫存器部件和控制部件等。主要實現處理指令、執行操作、控制時間、處理資料等功能,對資料長度的變化沒有影響。
os,即作業系統(operating system,簡稱os)是管理和控制計算機硬體與軟體資源的電腦程式,是直接執行在「裸機」上的最基本的系統軟體,任何其他軟體都必須在作業系統的支援下才能執行。目前使用最多的是32位和64位的os,但不同os中也可裝載不同的編譯器(如64位os中也可以裝32位的os或者編譯器),因此,os對資料型別的長度沒有直接的影響。
complier,即編譯器,是將「一種語言(通常為高階語言)」翻譯為「另一種語言(通常為低階語言)」的程式。工作流程為:現代編譯器的主要工作流程:源** (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標** (object code) → 鏈結器 (linker) → 可執行程式 (executables)。在編譯過程中就會涉及到資料型別長度分配的問題。因此,16位、32位、64位編譯器會使得資料型別的長度發生改變。
二、不同編譯器下的資料型別長度
32位編譯器:(visual studio c++)
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 4
sizeof(long) = 4
sizeof(long long) = 8
sizeof(void *) = 4 (表示指標型別資料長度)
64位編譯器:
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 4
sizeof(long) = 8
sizeof(long long) = 8
sizeof(void *) = 8
16位編譯器:(turbo c/turbo c++)
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 2
sizeof(long) = 4
sizeof(long double) = 16
sizeof(void *) = 4
不同編譯器下C 基本資料型別的位元組長度
位元 bit 即乙個二進位制位 例如100011就是6位元 位元組 byte 是計算機中資料型別最基本的單位,8bit組成1byte 1024byte組成1kb。short 短整型 佔2byte即16位,兩個位元組。int 整型 佔4byte即32位,乙個int型資料的長度用4個位元組來儲存。flo...
新手必備 C語言資料型別在不同編譯器佔位元組大小
c語言資料型別在不同編譯器佔位元組大小 16bit char unsigned char 1b char 2b short int 2b int unsigned int 2b long int 4b float 4b double 8b 32bit char unsigned char 1b ch...
mysql常用資料型別長度總結
align left align 在mysql中建立表時,varchar型別必須指定長度,int型別可以不指定長度。當然,在mysql中使用介面建立表 不使用sql語句建立表 若不指定長度,它會為你指定預設長度,下面對mysql中常見的幾種資料型別的預設長度和最大長度進行了總結。align cent...