Menu
CoddyTech

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:

  1. Chuyển đổi kiểu dữ liệu ngầm định (tự động)
  2. 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) value

C 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.

challenge icon

Thử thách

Dễ

Viết một chương trình:

  1. Khai báo một biến double result và gán giá trị 5.65 cho biến này
  2. Khai báo một biến int grade
  3. Gán giá trị của result cho grade bằng cách ép kiểu tường minh
  4. In giá trị của grade cù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)
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch C online