每一種語言都有其自資料定義的方式,
資料型態的定義,在於讓C編譯器在製作執行檔時,
能向作業系統要求預留所需的資源,如:記憶體空間。
所以,在寫程式前,必須先清楚所要解決的問題使用哪一類的數值型態。
C語言資料型別:
- 字元( char ) 占 1 Byte
signed char :-128
~ +127
unsigned char : 0
~ 255
C語言的字串(String),其實就是字元陣列。
- 整數( int ) 占 4 Bytes 232 =
4294967296
short int
2 Bytes(Turbo C 整數)
int 4
Bytes
unsigned int 4
Bytes (%u)
long long int 8 Bytes (-263~263-1)
(C99提供short、long 和 long
long等修飾詞來宣告,但得視不同編譯器與平台的支援)
- 浮點數( float ) 占 4 Bytes ( 10-38 ~ 10+38 )
(sign bit:1, exponent:7bits,
mantissa:24bits)
在數學上,浮點數是類似實數(real number)的數,是可以包含整數;
但嚴格說,C的浮點數和整數,是完全不相干範圍的數值!
簡單來說,浮點數就是帶有小數的數。
雙精倍實數( double ) 占 8 Bytes
(sign bit:1, exponent:11bits,
mantissa:52bits)
C語言資料型態表(32位元作業系統,long修飾詞沒作用)
資料型態 |
長度
(Bytes) |
數值範圍 |
精準位數 |
備註 |
char |
1 |
-128 ~
+127 |
|
|
unsigned char |
1 |
0 ~ 255 |
|
|
int |
4 |
-21億多
~ +21億多 |
|
|
unsigned
int |
4 |
0 ~ 42億多 |
|
|
short
int |
2 |
-32768 ~
+32767 |
|
範例 |
long
long int |
8 |
-263~263-1 |
|
|
float |
4 |
±3.4x10-38 ~ ±3.4x1038 |
7 |
|
double |
8 |
±1.7x10-308 ~ ±1.7x10308 |
15 |
|
long
double |
12 |
10-4932 ~ 104932 |
19 |
|
範例1:請判斷下列項目最佳的資料型態為何:
-
爸爸的月薪
-
筆記電腦的價格
-
身高
-
年齡
-
體重
-
家裡到學校距離
-
性別
範例2:請寫一個程式將上面表格之各資料型態所佔Bytes列出。
#include <stdio.h>
main( )
{
int a,b;
b = sizeof
( a ); /* 思考一下,變數 b 如何省略*/
printf("Size of int = %d Bytes \n",b); /* 改良過的輸出*/
}
範例3:請使用Dev C++編譯以下程式,會看到什麼樣子的執行結果?
#include <stdio.h>
#include <stdlib.h>
main()
{
int a=1234567890;
printf("%d \n", a);
system("PAUSE");
return 0;
}
若程式中a的數值逐漸增加 a=13579...,
請修改a的值,寫下最大能正確顯示結果,是什麼數值?
以及,最小能正確顯示結果,是什麼數值?
想想看,為什麼?
- 滿溢(overflow):電腦運算的結果,大於所能表示的最大值。
請計算整數 123456789 X 1000
的值為多少。
- 下溢、虧位(underflow):電腦運算的結果,低於所能表示的最小值。
請計算整數 -1234567x 10000的值。
- 練習:ACM Q10323: Factorial! You Must be Kidding!
|