Đánh máy trong C là gì?
Đánh máy là chuyển đổi một kiểu dữ liệu thành một kiểu khác. Nó còn được gọi là chuyển đổi dữ liệu hoặc chuyển đổi kiểu. Nó là một trong những khái niệm quan trọng được giới thiệu trong lập trình 'C'.
Lập trình 'C' cung cấp hai kiểu hoạt động truyền kiểu:
- Truyền kiểu ẩn
- Truyền kiểu rõ ràng
Truyền kiểu ẩn
Truyền kiểu ngầm có nghĩa là chuyển đổi kiểu dữ liệu mà không làm mất đi ý nghĩa ban đầu của nó. Kiểu đánh máy này rất cần thiết khi bạn muốn thay đổi kiểu dữ liệu mà không làm thay đổi tầm quan trọng của các giá trị được lưu trữ bên trong biến.
Chuyển đổi kiểu ngầm định xảy ra tự động khi một giá trị được sao chép sang kiểu dữ liệu tương thích của nó. Trong quá trình chuyển đổi, các quy tắc nghiêm ngặt để chuyển đổi loại được áp dụng. Nếu toán hạng thuộc hai kiểu dữ liệu khác nhau, thì toán hạng có kiểu dữ liệu thấp hơn sẽ tự động được chuyển đổi thành kiểu dữ liệu cao hơn. Loại chuyển đổi kiểu này có thể được nhìn thấy trong ví dụ sau.
#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);}
Đầu ra
1010
- Trong ví dụ đã cho, chúng ta đã khai báo một biến kiểu dữ liệu ngắn với giá trị được khởi tạo là 10.
- Ở dòng thứ hai, chúng ta đã khai báo một biến kiểu dữ liệu int.
- Trên dòng thứ ba, chúng ta đã gán giá trị của biến s cho biến a. Ở dòng thứ ba, chuyển đổi kiểu ngầm định được thực hiện khi giá trị từ biến s thuộc kiểu dữ liệu ngắn được sao chép vào biến a thuộc kiểu dữ liệu int.
Chuyển đổi ký tự thành Int
Hãy xem xét ví dụ về việc thêm một ký tự được giải mã trong ASCII với một số nguyên:
#includemain() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );}
Đầu ra:
Value of sum : 108
Ở đây, trình biên dịch đã thực hiện việc thăng hạng số nguyên bằng cách chuyển đổi giá trị của 'k' thành ASCII trước khi thực hiện thao tác cộng thực tế.
Hệ thống phân cấp chuyển đổi số học
Đầu tiên, trình biên dịch tiến hành việc thăng hạng một ký tự thành một số nguyên. Nếu các toán hạng vẫn có các kiểu dữ liệu khác nhau, thì chúng được chuyển đổi thành kiểu dữ liệu cao nhất xuất hiện trong biểu đồ phân cấp sau:
Hãy xem xét ví dụ sau để hiểu khái niệm:
#includemain() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );}
Đầu ra:
sum = 120.000000
Trước hết, biến c được chuyển đổi thành số nguyên, nhưng trình biên dịch chuyển đổi num và c thành "float" và thêm chúng để tạo ra kết quả 'float'.
Các điểm quan trọng về chuyển đổi ngầm định
- Kiểu chuyển đổi kiểu ngầm định còn được gọi là kiểu chuyển đổi kiểu tiêu chuẩn. Chúng tôi không yêu cầu bất kỳ từ khóa hoặc câu lệnh đặc biệt nào trong quá trình ép kiểu ngầm định.
- Chuyển đổi từ kiểu dữ liệu nhỏ hơn thành kiểu dữ liệu lớn hơn còn được gọi là xúc tiến kiểu . Trong ví dụ trên, chúng ta cũng có thể nói rằng giá trị của s được thăng cấp thành kiểu số nguyên.
- Việc chuyển đổi kiểu ngầm luôn xảy ra với các kiểu dữ liệu tương thích.
Chúng tôi không thể thực hiện truyền kiểu ngầm định trên các kiểu dữ liệu không tương thích với nhau, chẳng hạn như:
- Chuyển đổi float thành int sẽ cắt bớt phần phân số do đó làm mất ý nghĩa của giá trị.
- Chuyển đổi double thành float sẽ làm tròn các chữ số.
- Chuyển đổi int dài thành int sẽ làm giảm các bit bậc cao dư thừa.
Trong tất cả các trường hợp trên, khi chúng ta chuyển đổi các kiểu dữ liệu, giá trị sẽ mất đi ý nghĩa của nó. Nói chung, việc mất ý nghĩa của giá trị được cảnh báo bởi trình biên dịch.
Lập trình 'C' cung cấp một cách định kiểu khác là ép kiểu rõ ràng.
Truyền kiểu rõ ràng
Trong chuyển đổi kiểu ngầm định, kiểu dữ liệu được chuyển đổi tự động. Có một số tình huống mà chúng tôi có thể phải buộc chuyển đổi kiểu. Giả sử chúng ta có một biến div lưu trữ phép chia của hai toán hạng được khai báo là kiểu dữ liệu int.
int result, var1=10, var2=3;result=var1/var2;
Trong trường hợp này, sau khi thực hiện phép chia trên các biến var1 và var2, kết quả được lưu trong biến "result" sẽ ở định dạng số nguyên. Bất cứ khi nào điều này xảy ra, giá trị được lưu trữ trong biến "result" sẽ mất đi ý nghĩa của nó vì nó không xét đến phần phân số thường nhận được trong phép chia hai số.
Để buộc chuyển đổi kiểu trong những tình huống như vậy, chúng tôi sử dụng kiểu ép kiểu rõ ràng.
Nó yêu cầu một toán tử đúc kiểu. Cú pháp chung cho các thao tác ép kiểu như sau:
(type-name) expression
Đây,
- Tên kiểu là kiểu dữ liệu ngôn ngữ 'C' tiêu chuẩn.
- Một biểu thức có thể là một hằng số, một biến số hoặc một biểu thức thực tế.
Hãy để chúng tôi viết một chương trình để chứng minh việc thực hiện ép kiểu rõ ràng trong 'C'.
#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint b = (int)a + 1;printf("Value of a is %f\n", a);printf("Value of b is %d\n",b);return 0;}
Đầu ra:
Value of a is 1.200000Value of b is 2
- Chúng tôi đã khởi tạo một biến 'a' kiểu float.
- Tiếp theo, chúng ta có một biến khác 'b' kiểu dữ liệu số nguyên. Vì biến 'a' và 'b' thuộc các kiểu dữ liệu khác nhau, 'C' sẽ không cho phép sử dụng biểu thức như vậy và nó sẽ gây ra lỗi. Trong một số phiên bản của 'C,' biểu thức sẽ được đánh giá nhưng kết quả sẽ không như mong muốn.
- Để tránh những trường hợp như vậy, chúng tôi đã đánh máy biến 'a' kiểu float. Bằng cách sử dụng các phương pháp ép kiểu rõ ràng, chúng tôi đã chuyển đổi thành công float thành kiểu dữ liệu số nguyên.
- Chúng tôi có giá trị in của 'a' vẫn là một số float
- Sau khi đánh máy, kết quả sẽ luôn là một số nguyên 'b.'
Bằng cách này, chúng ta có thể thực hiện ép kiểu rõ ràng trong lập trình 'C'.
Tóm lược
- Đánh máy còn được gọi là chuyển đổi kiểu
- Nó có nghĩa là chuyển đổi một kiểu dữ liệu này thành một kiểu dữ liệu khác.
- Chuyển đổi kiểu dữ liệu nhỏ hơn thành một kiểu lớn hơn còn được gọi là xúc tiến kiểu.
- 'C' cung cấp một cách chuyển đổi kiểu ẩn và rõ ràng.
- Chuyển đổi kiểu ngầm hoạt động tự động khi tìm thấy kiểu dữ liệu tương thích.
- Chuyển đổi kiểu rõ ràng yêu cầu một toán tử truyền kiểu.
Hãy ghi nhớ các quy tắc sau về thực hành lập trình khi xử lý các kiểu dữ liệu khác nhau để tránh mất dữ liệu:
- Các kiểu số nguyên phải được chuyển đổi thành float.
- Loại phao nên được chuyển đổi thành đôi.
- Loại ký tự nên được chuyển đổi thành số nguyên.