Search…

Cơ Bản về Chuyển Kiểu trong C

22/09/20202 min read
Tìm hiểu về chuyển kiểu dữ liệu trong C.

Chuyển kiểu ngầm định

Trong quá trình biên dịch, nếu phát hiện 1 lệnh gán giá trị khác loại cho 1 biến, trình biên dịch sẽ tự động chuyển kiểu, gọi là cơ chế chuyển kiểu ngầm định.

Ví dụ:

double d = 13;	// tự động chuyển giá trị của d thành 13.0
int n = 16.95;	// tự động chuyển giá trị của n thành 16

Trình biên dịch sẽ hiện cảnh báo nếu xuất hiện sự chuyển kiểu không an toàn, gây mất mát giá trị, ví dụ như chuyển 1 dữ liệu có kích thước lớn, mang giá trị lớn về kiểu dữ liệu có kích thước nhỏ, hay dữ liệu số có dấu sang kiểu dữ liệu không dấu đều là chuyển kiểu không an toàn.

Khi tính toán 1 biểu thức, ví dụ như các phép toán số học, các hạng tử cần phải có cùng 1 kiểu thì việc tính toán mới diễn ra, nếu các hạng tử không cùng kiểu, sẽ xảy ra chuyển kiểu ngầm định, kiểu nhỏ hơn sẽ chuyển sang kiểu lớn hơn. Có dãy cấp độ như sau:

  • long double // (highest)
  • double
  • float
  • unsigned long int
  • long int
  • unsigned int
  • int // (lowest)

Tại sao int lại là kiểu dữ liệu nhỏ nhất trong dãy, còn shortchar ở đâu? Khi tính toán, kiểu dữ liệu short và char sẽ tự động được chuyển sang int.

Xét biểu thức tính toán đơn giản sau:

int n = 10 + 16.95;

Biểu thức bên phải là phép toán cộng giữa kiểu int (10) và kiểu double (16.95), khi đó 10 sẽ được chuyển kiểu thành 10.0 và phép toán trở thành 10.0 + 16.95, kết quả là 26.95, được gán cho n là 1 biến int nên được chuyển kiểu và n = 26.

Chuyển kiểu tường minh

Là việc chuyển 1 dữ liệu sang kiểu dữ liệu khác theo ý muốn của lập trình viên. Cú pháp chuyển kiểu như sau:

(<kiểu dữ liệu>)<dữ liệu cần chuyển>

Ví dụ:

int n = 10;
float f = (float)n;  // chuyển kiểu tường minh

Khi bắt đầu lập trình, có một lỗi phổ biến thường mắc phải là nhầm lẫn giữa phép chia các số nguyên trong toán học và phép chia các số nguyên trong lập trình, dẫn đến kết quả lập trình không được như mong muốn.

Ví dụ:

float f = 10 / 4;

Mong muốn kết quả f = 2.5 nhưng quy ước trong C là khi hai số nguyên chia nhau thì kết quả lấy phần nguyên do đó f = 2. Khắc phục như sau:

float f = ((float)10) / 4; // chuyển kiểu tường minh

Hoặc 1 cách khác:

float f = (1.0 * 10) / 4; // chuyển kiểu ngầm định
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024