Ép kiểu trong C là một cách để chuyển đổi một biến từ một kiểu dữ liệu này sang kiểu dữ liệu khác. Nếu như các bạn mới bắt đầu tìm hiểu về lập trình C mà chưa hiểu về ép kiểu trong C thì bài viết này sẽ giúp các bạn tháo gỡ những vướng mắc đó.
Ví dụ: nếu bạn muốn lưu trữ giá trị 'dài' thành một số nguyên đơn giản thì bạn có thể nhập 'long' thành 'int'. Bạn có thể chuyển đổi các giá trị từ kiểu này sang kiểu khác bằng cách sử dụng toán tử cast như sau:
(type_name) expression
Hãy xem xét ví dụ sau khi toán tử cast làm cho phép chia một biến số nguyên của biến số nguyên khác thành một phép toán dấu phẩy động:
#include
main() {
int sum = 17, count = 5;
double mean;
mean = (double) sum / count;
printf("Value of mean : %f\n", mean );
}
Khi mã trên được biên dịch và thực hiện, nó tạo ra kết quả sau:
Value of mean : 3.400000
Cần lưu ý ở đây rằng toán tử cast được ưu tiên hơn phân chia, vì vậy giá trị của tổng được chuyển đổi thành loại gấp đôi và cuối cùng nó được chia cho số có giá trị gấp đôi.
Loại chuyển đổi có thể được ngầm định được thực hiện bởi trình biên dịch tự động, hoặc nó có thể được quy định rõ ràng thông qua việc sử dụng toán tử cast . Nó được coi là thực hành lập trình tốt để sử dụng các nhà điều hành diễn viên bất cứ khi nào chuyển đổi loại là cần thiết.
Sự nâng cấp số nguyên trong C là quá trình mà theo đó giá trị của kiểu số nguyên "nhỏ hơn" int hoặc unsigned được chuyển đổi thành int hoặc unsigned int . Hãy xem xét một ví dụ về việc thêm một ký tự với một số nguyên:
#include
main() {
int i = 17;
char c = 'c'; /* ascii value is 99 */
int sum;
sum = i + c;
printf("Value of sum : %d\n", sum );
}
Khi mã trên được biên dịch và thực hiện, nó tạo ra kết quả sau:
Value of sum : 116
Ở đây, giá trị của tổng là 116 vì trình biên dịch đang thực hiện khuyến mãi số nguyên và chuyển đổi giá trị của 'c' thành ASCII trước khi thực hiện thao tác bổ sung thực tế.
Các chuyển đổi số học thông thường được ngầm thực hiện để đúc các giá trị của họ cho một loại phổ biến. Trình biên dịch đầu tiên thực hiện khuyến mãi số nguyên, nếu toán hạng vẫn có các loại khác nhau, thì chúng được chuyển đổi thành loại xuất hiện cao nhất trong hệ thống phân cấp sau:
Chuyển đổi số học thông thường không được thực hiện đối với toán tử gán, cũng như đối với toán tử logic && và ||. Chúng ta hãy lấy ví dụ sau:
#include
main() {
int i = 17;
char c = 'c'; /* ascii value is 99 */
float sum;
sum = i + c;
printf("Value of sum : %f\n", sum );
}
Khi mã trên được biên dịch và thực hiện, nó tạo ra kết quả sau:
Value of sum : 116.000000
Ở đây, thật đơn giản để hiểu rằng c đầu tiên được chuyển thành số nguyên, nhưng khi giá trị cuối cùng là gấp đôi, chuyển đổi số học thông thường sẽ áp dụng và trình biên dịch chuyển đổi i và c thành 'float' và thêm chúng cho kết quả 'float'.
Một số tài liệu học lập trình C khác: