C/C++

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 = &#039;A&#039;;
    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

留下一個回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *