BÀI 15: ÉP KIỂU DỮ LIỆU TRONG LẬP TRÌNH C

  -  
khóa đào tạo Lập trình lập trình sẵn C++ khóa huấn luyện lập trình C++ căn bản Ép dạng hình ngầm định vào C++ (Implicit type conversion in C++)

Dẫn nhập

Ở bài học trước, chúng ta đã cố kỉnh được BIẾN TĨNH vào C++ (Static variables).

Bạn đang xem: Bài 15: ép kiểu dữ liệu trong lập trình c

Hôm nay, bản thân sẽ phân tách sẽ tổng quan tiền về xay kiểu tài liệu và kỹ thuật Ép giao diện ngầm định vào C++ (Implicit type conversion).

Nội dung

Để phát âm hiểu bài xích này tốt nhất chúng ta nên có kỹ năng và kiến thức cơ bạn dạng về những phần:

Trong bài ta đã cùng khám phá các vấn đề:

Tổng quan tiền về ép thứ hạng dữ liệuÉp đẳng cấp ngầm định vào C++ (Implicit type conversion)

Tổng quan tiền về ép kiểu dáng dữ liệu

Trong bài bác BIẾN trong C++ (Variables in C++), các bạn đã hiểu rằng biến là tên của một vùng trong bộ nhớ lưu trữ RAM, và quý giá của vươn lên là được lưu trong bộ nhớ bên dưới dạng các bit nhị phân.

Các biến gồm kiểu dữ liệu khác nhau, mặc dù chúng giữ đầy đủ giá trị giống nhau, tuy thế khi lưu vào bộ nhớ, bọn chúng là số đông dãy nhị phân hoàn toàn không giống nhau.

Ví dụ: giá chỉ trị một là một số nguyên, 1.0 là một trong những chấm động. Mặc dù trong toán học tập nó là như nhau, mà lại khi giữ vào cỗ nhớ, nó được màn trình diễn bằng đa số dãy bit nhị phân trọn vẹn khác nhau.

Quan gần kề trường hợp bên dưới:

int nValue = 1; // initialize integer variable with integer 1float fValue = 1; // initialize floating point variable with integer 1Ở dòng lệnh đầu tiên, trình biên dịch (compiler) chỉ cần sao chép những bit nhị phân của một vào vùng nhớ của biến hóa nValue. Dẫu vậy ở cái lệnh đồ vật 2, trình biên dịch (compiler) phải tiến hành việc thay đổi giá trị số nguyên 1 sang trọng số chấm hễ 1.0f, kế tiếp giá trị 1.0f new được gán cho trở thành fValue.

Quá trình thay đổi một quý giá từ kiểu tài liệu này quý phái kiểu dữ liệu khác được gọi là chuyển thay đổi kiểu dữ liệu (ép kiểu).

Ép kiểu dữ liệu trong C++ xảy ra trong những trường vừa lòng sau (và một trong những trường đúng theo khác):

Gán hoặc khởi tạo một biến với cái giá trị của một kiểu dữ liệu khác

double dValue(1); // initialize double variable with integer value 1dValue = 1; // assign double variable with integer value 1Gọi một hàm với đối số (argument) tham số (parameter) bao gồm kiểu tài liệu khác nhauvoid doSomething(double dValue)doSomething(1); // pass integer value 1 to a function expecting a double parameterKiểu tài liệu của giá trị trả về không giống với kiểu dữ liệu trả về của hàm đófloat doSomething() return 1.0; // Pass double value 1.0 to lớn a function that returns a floatSử dụng toán tử 2 ngôi với 2 toán hạn khác kiểu dữ liệudouble dValue = 4.0 / 3; // division with a double & an integerint nValue = 1.5 * 3; // multiply with a double and an integerTrong C++, ép kiểu dữ liệu có nhì loại:

Ép giao diện ngầm định (Implicit type conversion): trình biên dịch (compiler) đã tự động biến hóa từ một kiểu dữ liệu này sang kiểu dữ liệu khác (kiểu dữ liệu cơ sở).Ép mẫu mã tường minh (Explicit type conversion): lập trình viên áp dụng toán tử ép hình dạng (casting operator) để tiến hành việc đưa đổi.

Trong bài học kinh nghiệm này, bản thân sẽ ra mắt về Ép hình dáng ngầm định (Implicit type conversion).

Ép giao diện ngầm định trong C++ (Implicit type conversion)

Ép loại ngầm định (Implicit type conversion) là thừa trình thay đổi giữa các kiểu dữ liệu cơ sở một phương pháp ngầm định, trình biên dịch (compiler) sẽ tự động hóa chuyển đổi xuất phát điểm từ một kiểu tài liệu này quý phái kiểu tài liệu khác. Lập trình viên ko can thiệp thẳng vào quá trình chuyển đổi.

Chuyển thay đổi giá trị xuất phát điểm từ 1 kiểu sang một vẻ bên ngoài dữ liệu tương tự lớn hơn thường an toàn, và không mất dữ liệu.

Ví dụ:

long l(1); // 1 is a integerdouble d(0.1f); // 0.1 is a floatChuyển đổi giá trị từ một vẻ bên ngoài sang một kiểu dữ liệu tương tự nhỏ hơn, hoặc giữa các kiểu tài liệu khác nhau thường xuyên không an toàn, nó có thể dẫn đến mất mát dữ liệu sau khi chuyển đổi.

Một số trường đúng theo lưu ý

Trường hợp 1: chuyển đổi giá trị sang một kiểu dữ liệu có miền giá trị nhỏ hơn sẽ gây ra ra hiệu quả không muốn muốn

#include using namespace std;int main(){int n = 500;char c = n;cout (c) Outputs:

*

Trong công tác trên, quý hiếm số nguyên (int) được chuyển đổi sang kiểu ký kết tự (char). Miền giá trị của char từ -128 mang đến 127, nhỏ tuổi hơn giao diện int nên vụ việc tràn số đã xảy ra. Tác dụng là đổi mới c bao gồm một giá trị không phải như mong muốn.

Xem thêm: Tìm Kiếm Thông Tin Trên Internet Và Thủ Thuật Tìm Kiếm Bằng Google Search

Trường vừa lòng 2: so với kiểu số chấm đụng (floating point), chuyển đổi giá trị về phong cách dữ liệu nhỏ tuổi hơn rất có thể gây mất độ chủ yếu xác.

#include #include using namespace std;int main(){// double value 0.123456789 has 9 significant digits, but float can only tư vấn about 7float f = 0.123456789;cout Outputs:

*

Trong lịch trình trên, 0.123456789 là một trong những giá trị hình dạng double gồm 9 chữ số. Lúc gán quý hiếm 0.123456789 vào vươn lên là f, biến f chỉ rất có thể giữ độ đúng đắn đến 7 chữ số, làm tác dụng sau khi biến hóa bị mất đi độ thiết yếu xác.

Trường đúng theo 3: chuyển đổi một cực hiếm từ số chấm hễ sang số nguyên sẽ làm mất đi phần thập thân.

#include using namespace std;int main(){double d = 1.5;int n = d;cout Outputs:

*

Trong chương trình trên, vươn lên là số nguyên n chỉ nhận giá trị 1, phần thập phân 0.5 đã bị mất đi.

Ép giao diện ngầm định trong một biểu thức

Khi giám sát và đo lường biểu thức, trình biên dịch đã tách mỗi biểu thức thành hầu hết biểu thức con nhỏ dại hơn. Những toán tử số học yên cầu các toán hạng đề xuất cùng phong cách dữ liệu.

Để đảm bảo an toàn điều này, trình biên dịch sử dụng các quy tắc sau đây:

Nếu toán hạng là một số nguyên gồm miền quý giá nhỏ hơn dạng hình int (bool, char, unsigned char, signed char, unsigned short, signed short), toán hạng này sẽ tự động chuyển về đẳng cấp int hoặc unsigned int.Nếu vẫn không phù hợp, trình biên dịch (compiler) đã chuyển những toán hạng về cùng kiểu dữ liệu với toán hạng bao gồm độ ưu tiên cao nhất.

Độ ưu tiên đẳng cấp dữ liệu của những toán hạng như sau:

long double (highest)doublefloatunsigned long longlong longunsigned longlongunsigned intint (lowest)

Ví dụ 1:

#include using namespace std;int main(){bool b(2);char c(6);short s(9);// show the type of b + c + scout Outputs:

*

Trong lịch trình trên, 3 trở nên b, c, s có kiểu dữ liệu nhỏ tuổi hơn hình dáng int, nên tác dụng biểu thức được chuyển đổi ngầm định về hình trạng int.

Ví dụ 2:

#include using namespace std;int main(){short s(1);int n(2);double d(1.0);// show the type of (s + d) * ncout Outputs:

*

Trong lịch trình trên, loại double gồm độ ưu tiên cao nhất, buộc phải cả biểu thức sẽ đổi khác ngầm định về hình dạng double.

Kết luận

Qua bài học này, các bạn đã rứa được tổng quan tiền về nghiền kiểu tài liệu và nghệ thuật Ép thứ hạng ngầm định trong C++ (Implicit type conversion).

Ở bài bác tiếp theo, bạn sẽ được học về ÉP KIỂU TƯỜNG MINH trong C++ (Explicit type conversion).

Cảm ơn các bạn đã theo dõi bài viết. Hãy nhằm lại phản hồi hoặc góp ý của mình để phạt triển nội dung bài viết tốt hơn. Đừng quên “Luyện tập – thách thức – không phải lo ngại khó”.

Xem thêm: Tóm Tắt Công Thức Kinh Tế Vi Mô Pdf, Tổng Hợp Các Công Thức Kinh Tế Vi Mô

Thảo luận

Nếu các bạn có ngẫu nhiên khó khăn hay thắc mắc gì về khóa học, đừng e dè đặt câu hỏi trong phần BÌNH LUẬN dưới hoặc trong mục HỎI và ĐÁP trên tủ sách sofaxuong.vn.com để nhận thấy sự cung ứng từ cùng đồng.