Chuyển đổi kiểu phần 1
Thuộc phần Nền tảng cơ bản trong hành trình C của Coddy. Bài học 13 trên 63.
Việc ép kiểu (type casting) trong C cho phép bạn chuyển đổi một giá trị từ kiểu dữ liệu này sang kiểu dữ liệu khác. Điều này hữu ích khi bạn cần thực hiện các phép toán giữa những kiểu dữ liệu khác nhau.
Có hai kiểu chuyển đổi kiểu dữ liệu chính:
- Chuyển đổi kiểu dữ liệu ngầm định (tự động)
- Chuyển đổi kiểu dữ liệu tường minh (thủ công)
Hãy bắt đầu với ép kiểu ngầm định:
Ép kiểu ngầm định diễn ra tự động, chẳng hạn khi bạn gán một giá trị có kiểu dữ liệu nhỏ hơn cho một biến có kiểu dữ liệu lớn hơn:
int num = 10;
double decimal_num;
// Ép kiểu ngầm định từ int sang double
decimal_num = num;Sau khi chạy đoạn code trên, decimal_num sẽ có giá trị 10.0
Phép chuyển đổi này an toàn vì kiểu double có thể lưu trữ mọi giá trị có thể có của kiểu int mà không làm mất dữ liệu.
Các đường chuyển kiểu ngầm định phổ biến:
- char → int → long → float → double
Bước chuyển từ long sang float có thể làm mất độ chính xác: float không thể lưu chính xác mọi giá trị long, vì vậy 123456789 trở thành 123456792.0.
Bây giờ, hãy cùng xem cách ép kiểu tường minh:
Ép kiểu tường minh được thực hiện thủ công bằng cách đặt kiểu dữ liệu đích trong dấu ngoặc đơn trước giá trị bạn muốn chuyển đổi. Hãy dùng cách này khi chuyển đổi từ kiểu dữ liệu lớn hơn sang kiểu nhỏ hơn, vì có thể mất dữ liệu:
double decimal_num = 5.65;
int num;
// Ép kiểu tường minh từ double sang int
num = (int)decimal_num;Sau khi chạy đoạn code trên, num sẽ có giá trị 5
Lưu ý rằng phần thập phân bị cắt bỏ (không được làm tròn) khi ép kiểu từ double sang int. Cú pháp ép kiểu tường minh là:
(target_type) valueC cũng thực hiện chuyển đổi này mà không cần ép kiểu: num = decimal_num; cho cùng kết quả là 5. Vì chuyển đổi có thể làm mất dữ liệu, viết phép ép kiểu giúp bạn thấy rõ điều đó và cho trình biên dịch biết rằng bạn nhận thức được nguy cơ mất dữ liệu.
Thử thách
DễViết một chương trình:
- Khai báo một biến double
resultvà gán giá trị 5.65 cho biến này - Khai báo một biến int
grade - Gán giá trị của
resultchogradebằng cách ép kiểu tường minh - In giá trị của
gradecùng thông báo "The grade is: " bằng printf
Tự làm thử
double result = 5.65;
int grade;
// Dùng ép kiểu tường minh để chuyển result (double) sang grade (int)
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Nền tảng cơ bản
2Biến
Kiểu dữ liệuSố nguyênSố thực - DoubleKý tựGiá trị BooleanHằng sốCơ bản về printfQuy tắc đặt tên biếnChuyển đổi kiểu phần 1Chuyển đổi kiểu phần 2Thử thách ôn tậpTự luyện tập: Trình biên dịch C online