Kiểu dữ liệu trong C – từ lý thuyết đến kích thước bộ nhớ

Trong thực tế, mọi thông tin đều có dạng cụ thể: tuổi là số nguyên, chiều cao là số thập phân, tên sách là chuỗi ký tự. Để máy tính "hiểu" và lưu trữ những giá trị này, C cung cấp các kiểu dữ liệu tương ứng.

Các kiểu dữ liệu cơ bản

  • char – ký tự (1 byte)
  • short – số nguyên ngắn (≥2 byte)
  • int – số nguyên (≥2 byte, thường 4 byte)
  • long – số nguyên dài (≥4 byte)
  • long long – số nguyên rất dài (≥8 byte)
  • float – số thực đơn (4 byte)
  • double – số thực kép (8 byte)
  • long double – số thực mở rộng (≥8 byte)

Khai báo và gán giá trị

Ký tự – char

#include <stdio.h>

int main(void) {
    char kyTu = 'A';          // 1 byte
    printf("Ký tự: %c\\n", kyTu);
    return 0;
}

Số nguyên – int

#include <stdio.h>

int main(void) {
    int tuoi = 25;            // 4 byte
    printf("Tuổi: %d\\n", tuoi);
    return 0;
}

Số ngắn – short

#include <stdio.h>

int main(void) {
    short diem = 9;           // 2 byte
    printf("Điểm: %hd\\n", diem);
    return 0;
}

Số thực – floatdouble

#include <stdio.h>

int main(void) {
    float chieuCao = 1.75f;   // 4 byte
    double canNang = 65.3;    // 8 byte
    printf("Chiều cao: %.2f m\\n", chieuCao);
    printf("Cân nặng: %.1lf kg\\n", canNang);
    return 0;
}

Kiểm tra kích thước với sizeof

Toán tử sizeof trả về số byte mà một biến hoặc kiểu dữ liệu chiếm trong bộ nhớ.

#include <stdio.h>

int main(void) {
    printf("char:        %zu byte\\n", sizeof(char));
    printf("short:       %zu byte\\n", sizeof(short));
    printf("int:         %zu byte\\n", sizeof(int));
    printf("long:        %zu byte\\n", sizeof(long));
    printf("long long:   %zu byte\\n", sizeof(long long));
    printf("float:       %zu byte\\n", sizeof(float));
    printf("double:      %zu byte\\n", sizeof(double));
    printf("long double: %zu byte\\n", sizeof(long double));
    return 0;
}

Kết quả mẫu trên hệ thống 64-bit GCC:

char:        1 byte
short:       2 byte
int:         4 byte
long:        8 byte
long long:   8 byte
float:       4 byte
double:      8 byte
long double: 16 byte

Quy tắc về kích thước

C chuẩn chỉ định:

  • sizeof(char) == 1
  • sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
  • sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)

Việc chia nhỏ kiểu dữ liệu giúp lập trình viên tối ưu bộ nhớ: dùng short cho các giá trị nhỏ, double khi cần độ chính xác cao.

Thẻ: C sizeof primitive-types memory-layout gcc

Đăng vào ngày 15 tháng 9 lúc 06:37