【C語言入門教程】2.1 數據類型(5種基本數據類型),聚合類型與修飾符


C語言有5種基本的數據類型,分別為 字符型整型單精度浮點型雙精度浮點型空類型

在不同的操作系統或硬件平台中,這些數據類型的值域范圍和所占用的內存是有差異的。這種差異影響了C語言的可移植性能,但如果能深入理解數據類型的構成,則可以最大程度避免該問題。

 

2.1.1 基本數據類型的字長與范圍

字長是指數據所占用內存的數量,字長決定了數據類型的值域,即范圍。以字符型為例,ANSI C標准中的字符型的長度是 1 字節(8位二進制編碼),可計算其值域為 -2的7次方 - +2的7次方,取值范圍為 -128~127。
計算機所使用的ASCII字符編碼共有 128 個元素,所以用字符型可將全部元素表示出來。依次類推,ANSI C 標准中其他基本類型的字長與范圍如下表所示:

ANSI C標准基本類型的字長與范圍
基本類型 字長 范圍
char(字符型) 1字節 -128~127
int(整型) 2字節 -32768~32767
float(單精度浮點型) 4字節 約精確到6位數
double(雙精度浮點型) 8字節 約精確到12位數
void(空值型) 0字節 無值

由於硬件平台和操作系統的不同,數據類型的字長可能與上表不同。例如,運行在AMD64架構的Linux系統中,整型的長度為 4 字節。要獲得當前系統環境中數據類型的字長,可運行下列程序。

#include <stdio.h>

int main()
{
	printf("字符型字長為%d\n", sizeof(char));
	printf("整型字長為%d\n", sizeof(int));
	printf("長整型字長為%d\n", sizeof(long));
	printf("單精度浮點型字長為%d\n", sizeof(float));
	printf("雙精度浮點型字長為%d\n", sizeof(double));

	return 0;
}

輸出:

字符型字長為 1
整型字長為 4
長整型字長為 8
單精度浮點型字長為 4
雙精度浮點型字長為 8

該程序使用 sizeof() 函數返回數據類型的字長,sizeof()函數的返回值為整型數據 ,返回的結果由printf()函數輸出到終端中。

 

2.1.2 聚合類型與修飾符

C語言支持聚合類型,包括數組、指針、結構體、公用體(聯合)、位域和枚舉。聚合類型構成了復雜的數據結構,用以描述事物的各種屬性。除 void類型 外,基本類型的前面可以有各種修飾符。修飾符用來改變
基本類型的意義,以便更准確地適應各種情況的需求。修飾符如下:

  • signed(有符號);
  • unsigned(無符號);
  • short(短型);
  • long(長型);

signedunsignedshortlong 修飾符適用於 字符整數 兩種基本類型,而 long 還可以用於 double 。unsigned 和 signed 修飾符分別表示 無正負值符號有正負值符號 的數據類型中,
計算機中原始數據類型使用的是二進制數,如果要表示正負值符號則需要用1位存儲空間。以字符型為例,無符號字符型取值值域為 2的8次方,那么范圍為 0~255,有符號字符型將1位用於存儲符號,取值值域為 2的7次方,那么范圍為 -128~127。下表給出所有根據 ANSI C 標准而組合的類型、字長和范圍。

ANSI C標准組合的類型、字長和范圍
類型 字長 范圍
char(字符型) 1字節 -128~127
unsigned char(無符號字符型) 1字節 0~255
signed char(有符號字符型) 1字節 -128~127
int(整型) 2字節 -32 768~32 767
unsigned int(無符號整型) 2字節 0~65 535
signed int(有符號整型) 2字節 -32 768~32 767
short int(短整型) 1字節 -128~127
unsigned short int(無符短整型) 1字節 0~255
signed short int(有符號短整型) 1字節 -128~127
long int(長整型) 4字節 -2 147 483 648~2 147 483 647
unsigned long int(無符號長整型) 4字節 0~4 294 967 296
signed long int(有符號長整型) 4字節 -2 147 483 648~2 147 483 647
float(單精度浮點型) 4字節 約精確到 6 位數
double(雙精度浮點型) 8字節 約精確到 12 位數
void(空值型) 0字節 無值

 

因為數據類型的默認定義是有符號數,所以 signed修飾符通常可省略。某些編譯器允許將unsigned用於浮點型,如 unsigned double。但這一用法降低了程序的可移植性,故建議一般不要采用。為了使用方便,GCC編譯程序允許使用整型的簡寫形式:short int 表示 short,即 int 可省略。

注意:表示正數時,最大能表示的值總是比值域少 1,這是因為將 0 作為正數看待,0占用了一個取值空間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM