C 語言學習筆記 (二):變數的基本資料型態
學習書籍:C 語言學習手冊 第四版。作者: 洪維恩
這是一篇記錄自己學習 C 語言的過程,算是給自己看的筆記,所以這裡面的內容,是我整理書中我認為重要的部分,然後用自己的方式重新寫一遍,如果有圖,我會理解完,再自己畫出來,內容肯定會和課本上有出入,若有錯誤,或是理解錯的地方,希望能讓我知道。
在上一篇提到 C 語言的介紹中,提到變數的使用,這篇將要來學習關於變數的資料型態。
在一支程式中,變數算是最基本的角色,所有程式的資料,都必須先宣告變數出來,而定義變數時,還需要宣告它的資料型態,這麼做才能讓編譯器知道要如何將資料寫入記憶體中。
這個過程就像是替資料分類,放入不同箱子,在存放到記憶體中。
箱子就像是變數,資料型態就像是標籤。
這麼做也有助於設計程式時,能夠更嚴謹的使用變數。
變數與常數
變數:會隨時依照程式來變動的資料。
常數:相對於變數,定義完不可更改,通常在一開始會先宣告出來。
基本資料型態以及宣告方式
不同類型資料要用不同的資料型態來存放變數,例如:
- 十顆蘋果要用整數型態存放
- 身高 170.5 公分,因為帶有小數點,因此要用浮點數型態存放
- 英文字母 A 要用字元型態來存放
int apple = 10; // 整數
float height = 170.5; // 符點數
char ch= 'A'; // 字元
整數型態 int
資料型態 | 位元組大小 | 數值範圍 |
---|---|---|
int | 4 bytes | -2147483648 ~ 2147483647 |
long | 4bytes | -2147483648 ~ 2147483647 |
short | 2bytes | -32768 ~ 32767 |
Unsigned int | 4 bytes | 0 ~ 4294967295 |
Unsigned long | 4 bytes | 0 ~ 4294967295 |
Unsigned short | 2 bytes | 0 ~ 65535 |
PS:某些編譯器基本 int 型態的大小,可能會是 2 bytes。
溢位
當超出數值型態所能表達的範圍,這種情況叫做溢位。
#include<stdio.h>
#include<stdlib.h>
int main(){
short int a, sum;
a = 32767;
sum = a + 1;
printf(sum); // 將會印出 -32768
}
浮點數 float
存放帶有小數點的值
float 單精度浮點數:1位符號,8位指數,23位小數。
double 雙精度浮點數:1位符號,8位指數,57位小數。
資料型態 | 位元組大小 | 數值範圍 |
---|---|---|
float | 4 bytes | 1.2e-38 ~ 3.4e38 |
double | 8 bytes | 2.2e-308 ~ 1.8e308 |
字元 char
字元型態用一個位元組來儲存字元。通常會對這些字元進行編碼,來表示字母、數字、符號的資料型態,最常見的編碼形式為 ASCII 碼來表示。例如:大寫 A 的 ASCII 碼為 65;而小寫 a 的 ASCII 碼為 97,兩者相差 32 ,可以利用 ASCII 進行大小寫轉換。
ASCII 碼
使用指定的 8 位二進位數組合,定義出 2^8 = 256 種字元 (0 ~ 255 個)。
一開始只用到 0 ~ 127 個,來表示所有的大小寫字母,數字、標點符號,後面128 ~ 255 並沒有被使用,之後又將一些特殊符號定義出來,稱 "延伸 ASCII 碼",為目前最常用的編碼。
跳脫字元與跳脫序列
無法用鍵盤輸入的字元,C 語言是用反斜線字元 "\" 在加上一個控制碼來表示的特殊字元。
跳脫序列 | 代表意義 | 十進位 ASCII |
---|---|---|
\a | 警告音 | 7 |
\b | 倒退一格 | 8 |
\n | 換行 | 10 |
\r | 歸位 | 13 |
\0 | 字串結束字元 | 0 |
\t | 跳格 | 9 |
\ | 反斜線 | 92 |
\’ | 單引號 | 39 |
\” | 雙引號 | 34 |
一段文字也是使用字元來存放嗎?
利用 "一維陣列" 來存放一連串的 "字元" 資料,我們稱作字串。
陣列的部分之後會在其他文章說明。
一段文字字串 "Hello World" 的宣告。
char text[] = "world"; // 字串
sizeof
用來查詢變數、常數、資料型態佔位符的大小。
#include<stdio.h>
#include<stdlib.h>
int main(){
char ch;
float num;
printf("2L: %d\n", sizeof(2L));
printf("ch: %d\n", sizeof(ch));
printf("num: %d\n", sizeof(num));
printf("int: %d\n", sizeof(int));
printf("long: %d\n", sizeof(long));
return 0;
}
執行結果:
2L: 4
ch: 1
num: 4
int: 4
long: 4
資料型態轉換
欲轉換的變數前面加上括號,填上要轉換的型態,就可以強制轉換了。
#include<stdio.h>
#include<stdlib.h>
int main(){
char ch = 'A';
int num = 100;
float num1 = 90;
float num2 = 45;
printf("%c\n", ch);
printf("%d\n", (int) ch);
printf("\n");
printf("%d\n", num/2);
printf("%f\n", (float) num/2);
printf("\n");
printf("%f\n", num1/num2);
printf("%d\n", (int) (num1/num2) );
return 0;
}
執行結果:
A
65
50
50.000000
2.000000
2