Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Ép kiểu (Type Cast) trong C/C++ là gì?


Ép kiểu (type casting) là cách chuyển biến từ kiểu dữ liệu này sang kiểu khác. Ví dụ, muốn lưu giá trị 'long' vào biến int đơn giản, có thể ép 'long' thành 'int'. Chuyển đổi giá trị từ kiểu này sang kiểu khác một cách tường minh bằng toán tử ép kiểu (cast operator) như sau:

(type_name) expression

Xem ví dụ: toán tử ép kiểu khiến phép chia hai số nguyên được thực hiện như phép chia thực (floating-point).

Ví dụ

#include <stdio.h>
main() {
    int sum = 17, count = 5;
    double mean;
    mean = (double) sum / count;
    printf("Value of mean : %f\n", mean);
}

Kết quả:

Value of mean : 3.400000

Lưu ý: toán tử ép kiểu có độ ưu tiên cao hơn phép chia, nên sum chuyển thành double trước, sau đó chia cho count cho kết quả double.

Chuyển kiểu có thể ngầm (implicit) do trình biên dịch tự làm, hoặc tường minh (explicit) qua cast operator. Coi là thói quen tốt nên dùng cast operator khi cần chuyển kiểu.

Thăng cấp nguyên (Integer Promotion)

Integer promotion là quá trình chuyển giá trị kiểu nguyên "nhỏ hơn" int hoặc unsigned int thành int hoặc unsigned int. Ví dụ cộng char với int:

Ví dụ

#include <stdio.h>
main() {
    int i = 17;
    char c = 'c'; /* mã ASCII 99 */
    int sum;
    sum = i + c;
    printf("Value of sum : %d\n", sum);
}

Kết quả:

Value of sum : 116

sum = 116 vì trình biên dịch thăng cấp 'c' thành ASCII 99 trước khi cộng.

Chuyển đổi số học thông thường (Usual Arithmetic Conversion)

Các chuyển đổi số học thông thường được thực hiện ngầm để ép các giá trị về kiểu chung. Trình biên dịch trước thăng cấp nguyên; nếu toán hạng vẫn khác kiểu, chuyển về kiểu cao nhất trong hệ thống phân cấp:

Ép kiểu (Type Cast) trong C/C++ là gì?

Chuyển đổi số học thông thường không áp dụng cho toán tử gán, cũng không cho && và ||. Ví dụ:

Ví dụ

#include <stdio.h>
main() {
    int i = 17;
    char c = 'c'; /* ascii 99 */
    float sum;
    sum = i + c;
    printf("Value of sum : %f\n", sum);
}

Kết quả

Value of sum : 116.000000

Đơn giản: c chuyển thành int, nhưng kết quả cuối là float, nên chuyển đổi số học thông thường áp dụng, trình biên dịch ép i và c thành float rồi cộng cho kết quả float.