Mục lục
Chuyển đổi ngầm định là việc chuyển đổi được thực hiện bởi trình biên dịch và chúng ta không cần tác động gì đến.
Việc chuyển đổi kiểu dữ liệu này được thực hiện khi muốn chuyển dữ kiệu nhỏ sang kiểu dữ liệu lớn hơn có nghĩa là kích thước kiểu dữ liệu trước phải nhỏ hơn kích thước của kiểu dữ liệu sau. Ví dụ: Chúng ta không thể chuyển kiểu dữ liệu float
(4bytes) sang kiểu int
(2bytes), vì ta thấy kích thước kiểu float
lớn hơn so với kích thước kiểu int
. Cho nên ta phải làm ngược lại:
Ví dụ
|
2. Chuyển đổi kiểu tường minh (explicit)
Chuyển đổi tường minh là việc chuyển đổi được thực hiện một cách rõ ràng bởi yêu cầu của người lập trình bằng cách sử dụng các hàm được định nghĩa trước hay cần một toán tử cast
.
Trong chuyển đổi kiểu tường minh, ta có thể chuyển kiểu dữ liệu lớn về kiểu dữ liệu có kích thước nhỏ hơn mà không báo lỗi. Nếu kiểu dữ liệu vượt quá miền giá trị của kiểu dữ liệu ta muốn ép về thì chương trình sẽ tự động cắt bit sao cho phù hợp với khả năng chứa kiểu dữ liệu đó.
Cú pháp: (<kiểu dữ liệu>) <biến cần ép kiểu>
Ví dụ
|
Kết quả chạy của chương trình trên là:
Ta thấy 256 có mã nhị phân là 100000000 do kiểu byte
có giới hạn chỉ đến 255 nên không thể chứa 256 được. Kiểu byte
có kích thước là 1 byte
tương đương với 8 bit
, như vầy chương trình sẽ cắt mã nhị phân của 256 về còn 8 bit
từ trái sang. Ta được 00000000 (đủ 8 bit) tương đương với 0. Vậy biến xyz
sẽ mang giá trị là 0.
Lưu ý: Ban đầu ta thấy biến abc = 256
nhưng khi ép kiểu thì giá trị của xyz = 0
. Vậy nên, khi ép kiểu dữ liệu chúng ta phải thật sự cẩn thận nếu không sẽ làm ảnh hưởng đến kết quả của toàn bộ bài toán.
Ngoài ra chúng ta còn có một số phương thức chuyển đổi kiểu dữ liệu trong C# nằm trong lớp tiện ích Convert
.
Các đặc điểm của các phương thức trong lớp Convert
:
Bảng các phương thức chuyển đổi kiểu có sẵn trong C#:
Phương thức
|
Miêu tả
|
---|---|
ToBoolean
|
Chuyển đổi một kiểu thành một giá trị Boolean nếu có thể
|
ToByte
|
Chuyển đổi một kiểu thành một byte
|
ToChar
|
Chuyển đổi một kiểu thành một Unicode Character, nếu có thể
|
ToDateTime
|
Chuyển đổi một kiểu (integer hoặc string) thành các cấu trúc datetime
|
ToDecimal
|
Chuyển đổi một kiểu số thực hoặc số nguyên thành kiểu thập phân
|
ToDouble
|
Chuyển một kiểu thành kiểu double
|
ToInt16
|
Chuyển đổi một kiểu thành một 16-bit integer
|
ToInt32
|
Chuyển đổi một kiểu thành một 32-bit integer
|
ToInt64
|
Chuyển đổi một kiểu thành một 64-bit integer
|
ToSbyte
|
Chuyển đổi một kiểu thành một kiểu signed byte
|
ToSingle
|
Chuyển đổi một kiểu thành một số small floating point
|
ToSing
|
Chuyển đổi một kiểu thành một String
|
ToType
|
Chuyển đổi một kiểu thành một kiểu đã xác định
|
ToUInt16
|
Chuyển đổi một kiểu thành kiểu unsigned int
|
ToUInt32
|
Chuyển đổi một kiểu thành unsigned long
|
ToUInt64
|
Chuyển đổi một kiểu thành một unsigned big integer
|
Một ví dụ nhỏ minh họa cho việc chuyển đổi bằng hai phương pháp ép kiểu nêu trên:
Ví dụ
|
Biên dịch chương trình cho ta thấy kết quả:
Ta thấy giá trị của biến result_1 = variable_1
vì kích thước của kiểu giá trị float > int
nên giá trị của nó sau khi ép kiểu không thay đổi. Ngược lại, ở biến result_2 < variable_2
bởi vì kiểu int là kiểu số nguyên nên nó không thể chứa kiểu double được, vì vậy nên phần thập phân phía sau sẽ được làm tròn.
Có một loại ép kiểu chúng ta thường xuyên dùng đó là ép từ kiểu string sang kiểu số. Vì những gì nhập từ bàn phím đều cho giá trị là chuỗi nên ta cần thực hiện phép chuyển đổi này trước khi sử dụng:
Ví dụ
|
Biên dịch chương trình chúng ta sẽ nhận được kết quả:
Về bài trước... |
Bài tiếp theo... |
+ Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!
* Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!
* Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!
+ -:
+ -: