🎯 Kiểu dữ liệu cơ bản trong C++
📖 Giới thiệu
Kiểu dữ liệu (data types) quy định loại thông tin mà một biến có thể lưu trữ và các phép toán có thể thực hiện trên nó. Trong C++, việc hiểu rõ các kiểu dữ liệu cơ bản là rất quan trọng vì nó ảnh hưởng đến cách chương trình lưu trữ và xử lý thông tin.
C++ là ngôn ngữ có kiểu dữ liệu mạnh (strongly typed), nghĩa là mỗi biến phải có một kiểu cụ thể và không thể tự động chuyển đổi sang kiểu khác một cách tuỳ tiện.
Trong bài này, chúng ta sẽ tìm hiểu 4 kiểu dữ liệu cơ bản nhất: int (số nguyên), float/double (số thực), char (ký tự), và bool (logic).
🔧 Cú pháp
Kiểu số nguyên (Integer Types)
// Kiểu int cơ bản
int age = 25; // Số nguyên 32-bit
short shortNum = 1000; // Số nguyên 16-bit
long longNum = 1000000L; // Số nguyên 64-bit
long long veryLongNum = 999999999999LL; // Số nguyên 64-bit
// Có dấu và không dấu
unsigned int positiveOnly = 3000000000U; // Chỉ số dương
signed int withSign = -12345; // Có thể âm hoặc dương (mặc định)Kiểu số thực (Floating Point Types)
float price = 99.99f; // Số thực độ chính xác đơn (32-bit)
double distance = 123.456789; // Số thực độ chính xác kép (64-bit)
long double precision = 123.456789123456789L; // Độ chính xác mở rộngKiểu ký tự (Character Type)
char letter = 'A'; // Một ký tự ASCII
char digit = '5'; // Ký tự số (không phải số 5)
char symbol = '@'; // Ký tự đặc biệt
char newline = '\n'; // Ký tự điều khiển (xuống dòng)Kiểu logic (Boolean Type)
bool isTrue = true; // Giá trị đúng
bool isFalse = false; // Giá trị sai
bool result = (5 > 3); // Kết quả của phép so sánhKý tự đặc biệt (Escape Sequences)
char tab = '\t'; // Tab
char backslash = '\\'; // Dấu gạch chéo ngược
char quote = '\''; // Dấu nháy đơn
char nullChar = '\0'; // Ký tự null (kết thúc chuỗi)🔬 Phân tích & Giải thích chi tiết
Kích thước và phạm vi các kiểu dữ liệu
| Kiểu | Kích thước | Phạm vi | Sử dụng |
|---|---|---|---|
bool | 1 byte | true/false | Logic, điều kiện |
char | 1 byte | -128 đến 127 | Ký tự ASCII |
short | 2 bytes | -32,768 đến 32,767 | Số nguyên nhỏ |
int | 4 bytes | -2,147,483,648 đến 2,147,483,647 | Số nguyên thông thường |
long | 8 bytes | ±9 x 10¹⁸ | Số nguyên lớn |
float | 4 bytes | ±3.4 x 10³⁸ (7 chữ số) | Số thực độ chính xác đơn |
double | 8 bytes | ±1.7 x 10³⁰⁸ (15 chữ số) | Số thực độ chính xác kép |
Khi nào dùng kiểu nào?
int - Cho số nguyên thông thường
int studentCount = 30; // Số lượng học sinh
int temperature = -5; // Nhiệt độ (có thể âm)
int score = 95; // Điểm sốfloat vs double - Cho số thực
// Dùng float khi:
float price = 19.99f; // Giá tiền (độ chính xác vừa đủ)
float percentage = 85.5f; // Phần trăm
// Dùng double khi:
double scientificValue = 3.141592653589793; // Tính toán khoa học
double bankBalance = 1234567.89; // Số tiền lớn, cần độ chính xác caochar - Cho ký tự đơn
char grade = 'A'; // Điểm chữ
char choice = 'y'; // Lựa chọn (y/n)
char operation = '+'; // Phép toánbool - Cho logic
bool isAdult = true; // Trạng thái logic
bool hasPermission = false; // Quyền hạn
bool isComplete = (progress == 100); // Kết quả so sánhChuyển đổi kiểu tự động (Implicit Conversion)
C++ có thể tự động chuyển đổi giữa các kiểu tương thích:
int a = 10;
double b = a; // int → double: OK, không mất dữ liệu
int c = 3.14; // double → int: Cảnh báo, mất phần thập phân (c = 3)Overflow và Underflow
// Overflow - vượt quá giá trị tối đa
int max = 2147483647; // Giá trị lớn nhất của int
int overflow = max + 1; // Tràn số → số âm rất lớn
// Underflow - dưới giá trị tối thiểu
int min = -2147483648; // Giá trị nhỏ nhất của int
int underflow = min - 1; // Tràn số → số dương rất lớn💻 Ví dụ minh họa
Chương trình demo các kiểu dữ liệu
#include <iostream>
#include <iomanip> // Để định dạng output
using namespace std;
int main() {
cout << "=== DEMO CÁC KIỂU DỮ LIỆU CƠ BẢN ===" << endl;
// Kiểu số nguyên
int age = 25;
short year = 2024;
long population = 98000000L;
cout << "\n1. KIỂU SỐ NGUYÊN:" << endl;
cout << "Tuổi (int): " << age << endl;
cout << "Năm (short): " << year << endl;
cout << "Dân số VN (long): " << population << endl;
// Kiểu số thực
float height = 170.5f;
double weight = 65.25;
double bmi = weight / ((height/100) * (height/100));
cout << "\n2. KIỂU SỐ THỰC:" << endl;
cout << "Chiều cao (float): " << height << " cm" << endl;
cout << "Cân nặng (double): " << weight << " kg" << endl;
cout << fixed << setprecision(2); // 2 chữ số thập phân
cout << "BMI (tính toán): " << bmi << endl;
// Kiểu ký tự
char grade = 'A';
char symbol = '@';
char newline = '\n';
cout << "\n3. KIỂU KÝ TỰ:" << endl;
cout << "Điểm chữ: " << grade << endl;
cout << "Ký hiệu: " << symbol << endl;
cout << "Xuống dòng: " << (int)newline << " (mã ASCII)" << endl;
// Kiểu logic
bool isPassed = (grade == 'A' || grade == 'B');
bool isFailed = !isPassed;
cout << "\n4. KIỂU LOGIC:" << endl;
cout << "Đã qua môn: " << boolalpha << isPassed << endl; // hiện true/false
cout << "Trượt môn: " << boolalpha << isFailed << endl;
return 0;
}Kết quả:
=== DEMO CÁC KIỂU DỮ LIỆU CƠ BẢN ===
1. KIỂU SỐ NGUYÊN:
Tuổi (int): 25
Năm (short): 2024
Dân số VN (long): 98000000
2. KIỂU SỐ THỰC:
Chiều cao (float): 170.5 cm
Cân nặng (double): 65.25 kg
BMI (tính toán): 22.46
3. KIỂU KÝ TỰ:
Điểm chữ: A
Ký hiệu: @
Xuống dòng: 10 (mã ASCII)
4. KIỂU LOGIC:
Đã qua môn: true
Trượt môn: falseChương trình quản lý điểm số
#include <iostream>
#include <string>
using namespace std;
int main() {
// Thông tin sinh viên
string studentName;
int studentId;
char class_letter;
// Điểm số
float math, physics, chemistry;
double average;
// Trạng thái
bool isPassed;
char grade;
cout << "=== HỆ THỐNG QUẢN LÝ ĐIỂM ===" << endl;
// Nhập thông tin
cout << "Tên sinh viên: ";
getline(cin, studentName);
cout << "Mã số SV: ";
cin >> studentId;
cout << "Lớp (A/B/C): ";
cin >> class_letter;
cout << "Điểm Toán: ";
cin >> math;
cout << "Điểm Lý: ";
cin >> physics;
cout << "Điểm Hóa: ";
cin >> chemistry;
// Tính toán
average = (math + physics + chemistry) / 3.0;
isPassed = (average >= 5.0);
// Xếp loại
if (average >= 9.0) {
grade = 'A';
} else if (average >= 8.0) {
grade = 'B';
} else if (average >= 6.5) {
grade = 'C';
} else if (average >= 5.0) {
grade = 'D';
} else {
grade = 'F';
}
// Hiển thị kết quả
cout << "\n=== KẾT QUẢ HỌC TẬP ===" << endl;
cout << "Sinh viên: " << studentName << endl;
cout << "MSSV: " << studentId << endl;
cout << "Lớp: " << class_letter << endl;
cout << "Điểm TB: " << average << "/10" << endl;
cout << "Xếp loại: " << grade << endl;
cout << "Kết quả: " << (isPassed ? "ĐẬU" : "TRƯỢT") << endl;
return 0;
}Chương trình demo chuyển đổi kiểu
#include <iostream>
using namespace std;
int main() {
cout << "=== DEMO CHUYỂN ĐỔI KIỂU ===" << endl;
// Chuyển đổi tự động (implicit)
int intValue = 42;
double doubleValue = intValue; // int → double
cout << "int → double: " << intValue << " → " << doubleValue << endl;
double pi = 3.14159;
int truncated = pi; // double → int (mất phần thập phân)
cout << "double → int: " << pi << " → " << truncated << endl;
// Ép kiểu (explicit casting)
double price = 199.99;
int roundedPrice = (int)(price + 0.5); // Làm tròn thủ công
cout << "Làm tròn: " << price << " → " << roundedPrice << endl;
// Ký tự và số
char letter = 'A';
int asciiValue = letter; // char → int (mã ASCII)
cout << "Ký tự → ASCII: '" << letter << "' → " << asciiValue << endl;
int number = 65;
char character = (char)number; // int → char
cout << "ASCII → Ký tự: " << number << " → '" << character << "'" << endl;
// Boolean và số
bool truth = true;
int truthValue = truth; // bool → int (true = 1, false = 0)
cout << "bool → int: " << boolalpha << truth << " → " << truthValue << endl;
int zero = 0, nonZero = 42;
bool isZero = zero; // int → bool (0 = false, khác 0 = true)
bool isNonZero = nonZero;
cout << "int → bool: " << zero << " → " << boolalpha << isZero << endl;
cout << "int → bool: " << nonZero << " → " << boolalpha << isNonZero << endl;
return 0;
}🏋️ Thực hành
Bài tập 1: Khai báo đúng kiểu
Chọn kiểu dữ liệu phù hợp cho các biến sau:
- Tuổi của một người
- Giá của một món hàng
- Điểm chữ (A, B, C, D, F)
- Trạng thái đã kết hôn hay chưa
- Số điện thoại (chỉ lưu trữ, không tính toán)
Bài tập 2: Tính toán với nhiều kiểu
Viết chương trình:
- Nhập chiều dài và chiều rộng (số thực)
- Tính diện tích và chu vi
- Hiển thị kết quả với 2 chữ số thập phân
Bài tập 3: Chuyển đổi nhiệt độ
Viết chương trình chuyển đổi từ Celsius sang Fahrenheit:
- Công thức: F = C × 9/5 + 32
- Sử dụng kiểu double cho độ chính xác
Bài tập 4: Phân tích overflow
Dự đoán kết quả của đoạn code sau:
int max = 2147483647;
int result1 = max + 1;
int result2 = max + 2;
cout << result1 << endl;
cout << result2 << endl;Lời giải chi tiết
Bài tập 1:
int age; // Tuổi - số nguyên từ 0-120
double price; // Giá - cần độ chính xác cao cho tiền tệ
char grade; // Điểm chữ - một ký tự
bool isMarried; // Tình trạng hôn nhân - true/false
string phoneNumber; // SĐT - chuỗi (có thể có +, -, khoảng trắng)Bài tập 2:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double length, width;
cout << "Nhập chiều dài: ";
cin >> length;
cout << "Nhập chiều rộng: ";
cin >> width;
double area = length * width;
double perimeter = 2 * (length + width);
cout << fixed << setprecision(2);
cout << "Diện tích: " << area << " m²" << endl;
cout << "Chu vi: " << perimeter << " m" << endl;
return 0;
}Bài tập 3:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double celsius, fahrenheit;
cout << "Nhập nhiệt độ Celsius: ";
cin >> celsius;
fahrenheit = celsius * 9.0/5.0 + 32;
cout << fixed << setprecision(2);
cout << celsius << "°C = " << fahrenheit << "°F" << endl;
return 0;
}Bài tập 4:
// Kết quả sẽ là:
// result1 = -2147483648 (tràn số về giá trị âm nhỏ nhất)
// result2 = -2147483647 (tiếp tục đếm từ giá trị âm)📋 Tóm tắt
🎯 Những gì đã học
- 4 kiểu cơ bản: int (số nguyên), float/double (số thực), char (ký tự), bool (logic)
- Kích thước và phạm vi: Mỗi kiểu có giới hạn về giá trị và bộ nhớ
- Chuyển đổi kiểu: Tự động (implicit) và ép kiểu (explicit casting)
- Overflow/Underflow: Vượt quá giới hạn sẽ gây ra tràn số
🔧 Nguyên tắc chọn kiểu dữ liệu
- int: Số nguyên thông thường (-2 tỷ đến +2 tỷ)
- double: Số thực cần độ chính xác cao
- float: Số thực độ chính xác vừa đủ, tiết kiệm bộ nhớ
- char: Một ký tự ASCII
- bool: Giá trị logic true/false
🚀 Chuẩn bị cho bước tiếp theo
Bài học tiếp theo sẽ tìm hiểu về các toán tử trong C++. Đảm bảo bạn đã:
- [x] Hiểu được 4 kiểu dữ liệu cơ bản
- [x] Biết kích thước và phạm vi của từng kiểu
- [x] Nắm được cách chuyển đổi giữa các kiểu
- [x] Hiểu khái niệm overflow và underflow
💡 Lời khuyên quan trọng
"Chọn kiểu dữ liệu phù hợp ngay từ đầu sẽ giúp tránh bugs và tối ưu hiệu suất chương trình!"
Chuyển sang: Toán tử để học về các phép toán số học, logic và so sánh trong C++!