Phao kiểu gì. Các kiểu dữ liệu trong ngôn ngữ C

Bảng tóm tắt này cung cấp thông tin về các kiểu dữ liệu chính của ngôn ngữ lập trình C++ và các tính năng triển khai chúng. Ngoài ra, ở cuối bản ghi có một bảng chứa các phạm vi giá trị của các loại này.

Khái niệm kiểu dữ liệu

Mục đích chính của bất kỳ chương trình nào là xử lý dữ liệu. Các loại dữ liệu khác nhau được lưu trữ và xử lý khác nhau. Trong bất kỳ ngôn ngữ thuật toán nào, mọi hằng, biến, biểu thức hoặc hàm đều phải có một kiểu cụ thể.

Kiểu dữ liệu xác định:

  • biểu diễn dữ liệu bên trong trong bộ nhớ máy tính;
  • tập hợp các giá trị mà đại lượng thuộc loại này có thể nhận;
  • các phép toán và hàm có thể áp dụng cho các đại lượng thuộc loại này.

Dựa trên những đặc điểm này, người lập trình lựa chọn loại của từng đại lượng sử dụng trong chương trình để biểu diễn các đối tượng thực. Việc khai báo kiểu bắt buộc cho phép trình biên dịch kiểm tra tính hợp lệ của các cấu trúc chương trình khác nhau. Loại giá trị xác định các lệnh máy sẽ được sử dụng để xử lý dữ liệu.

Tất cả các loại ngôn ngữ C++ có thể được chia thành nền tảng hỗn hợp . Ngôn ngữ C++ định nghĩa sáu chủ yếu các kiểu dữ liệu để biểu diễn các giá trị số nguyên, số thực, ký tự và logic. Dựa vào các loại này, người lập trình có thể nhập mô tả hỗn hợp các loại. Chúng bao gồm mảng, liệt kê, hàm, cấu trúc, tham chiếu, con trỏ, liên kết và lớp.

Các kiểu dữ liệu cơ bản trong C++

Các kiểu dữ liệu cơ bản (chuẩn) thường được gọi là số học vì chúng có thể được sử dụng trong các phép tính toán học. Để mô tả các loại chính, sau đây được xác định:

  1. int(int);
  2. char(char);
  3. wchar_t(widechar);
  4. bool(boolean);
  5. nổi (thực);
  6. gấp đôi (độ chính xác gấp đôi thực).

Bốn loại đầu tiên được gọi là số nguyên ( trọn ), hai cái cuối cùng - các loại dấu phẩy động . Mã mà trình biên dịch tạo ra để xử lý các giá trị số nguyên khác với mã dành cho các giá trị dấu phẩy động.

Có bốn công cụ xác định kiểu , làm rõ cách biểu diễn bên trong và phạm vi giá trị của các loại tiêu chuẩn:

  • ngắn ngắn);
  • dài dài);
  • đã ký(đã ký);
  • chưa ký.

Kiểu số nguyên (int)

Kích thước của kiểu int không được xác định theo tiêu chuẩn mà phụ thuộc vào máy tính và trình biên dịch. Đối với bộ xử lý 16 bit, 2 byte được phân bổ cho các giá trị thuộc loại này, đối với bộ xử lý 32 bit - 4 byte.

Bộ xác định ngắn trước tên loại cho trình biên dịch biết rằng 2 byte phải được phân bổ cho số, bất kể dung lượng bộ xử lý. Bộ xác định dài có nghĩa là giá trị số nguyên sẽ chiếm 4 byte. Vì vậy, trên máy tính 16 bit, các giá trị tương đương là int và short int, còn trên máy tính 32 bit, các giá trị tương đương là int và long int.

Đại diện nội bộ giá trị của kiểu số nguyên - số nguyên trong mã nhị phân. Khi sử dụng bộ xác định có dấu, bit quan trọng nhất của số được hiểu là có dấu (0 là số dương, 1 là số âm). Bộ xác định không dấu chỉ cho phép biểu diễn các số dương vì bit quan trọng nhất được coi là một phần của mã số. Do đó, phạm vi giá trị của kiểu int phụ thuộc vào các chỉ định. Phạm vi giá trị của các giá trị kiểu số nguyên với các chỉ định khác nhau dành cho máy tính tương thích với PC IBM được đưa ra trong bảng “Phạm vi giá trị của các kiểu dữ liệu đơn giản” ở cuối mục nhập.

Mặc định là tất cả kiểu số nguyênđược coi là đã ký, nghĩa là, phần xác định đã ký có thể được bỏ qua.

Các hằng số được tìm thấy trong một chương trình được gán loại này hay loại khác tùy theo loại của chúng. Nếu vì lý do nào đó mà lập trình viên không hài lòng với loại này, anh ta có thể chỉ ra rõ ràng loại được yêu cầu bằng cách sử dụng các hậu tố L, l (dài) và U, u (không dấu). Ví dụ: hằng số 32L sẽ có kiểu dài và chiếm 4 byte. Bạn có thể sử dụng hậu tố L và U cùng lúc, ví dụ: 0x22UL hoặc 05Lu.

Ghi chú

Các kiểu short int, long int, signatureed int và unsigned int có thể được viết tắt tương ứng thành short, long, signature và unsigned.

Kiểu ký tự (char)

Một giá trị loại ký tự được phân bổ một số byte đủ để chứa bất kỳ ký tự nào từ bộ ký tự cho của máy tính này, xác định tên của loại. Thông thường đây là 1 byte. Kiểu char, giống như các kiểu số nguyên khác, có thể có dấu hoặc không dấu. Các giá trị đã ký có thể lưu trữ các giá trị trong phạm vi -128 đến 127. Sử dụng bộ xác định không dấu, các giá trị có thể nằm trong khoảng từ 0 đến 255. Điều này đủ để lưu trữ bất kỳ ký tự nào trong 256 ký tự bộ ASCII. Các giá trị của kiểu char cũng được sử dụng để lưu trữ các số nguyên không vượt quá ranh giới của các phạm vi đã chỉ định.

Kiểu ký tự mở rộng (wchar_t)

Loại wchar_t được thiết kế để hoạt động với một tập hợp các ký tự mà 1 byte không đủ để mã hóa, ví dụ: Unicode. Kích thước của loại này phụ thuộc vào việc triển khai; như một quy luật, nó tương ứng với loại ngắn. Các hằng chuỗi kiểu wchar_t được viết bằng tiền tố L, ví dụ: L»Gates».

Kiểu Boolean (bool)

Giá trị Boolean chỉ có thể lấy giá trị true và false là các từ dành riêng. Dạng bên trong biểu thị giá trị sai là 0 (không). Bất kỳ giá trị nào khác được hiểu là đúng. Khi chuyển đổi thành kiểu số nguyên, true có giá trị 1.

Các loại dấu phẩy động (float, double và long double)

Tiêu chuẩn C++ xác định ba loại dữ liệu để lưu trữ các giá trị thực: float, double và long double.

Các kiểu dữ liệu dấu phẩy động được lưu trữ trong bộ nhớ máy tính khác với các kiểu dữ liệu số nguyên. Biểu diễn bên trong của một số thực bao gồm hai phần - phần định trị và số mũ. Trên các máy tính tương thích với IBM PC, các giá trị float chiếm 4 byte, trong đó một chữ số nhị phân được phân bổ cho dấu mantissa, 8 bit cho số mũ và 23 cho phần định trị. Phần định trị là một số lớn hơn 1,0 nhưng nhỏ hơn 2,0. Vì chữ số đầu của phần định trị luôn là 1 nên nó không được lưu trữ.

Đối với các giá trị kép chiếm 8 byte, 11 và 52 bit lần lượt được phân bổ cho số mũ và phần định trị. Độ dài của phần định trị xác định độ chính xác của số và độ dài của số mũ xác định phạm vi của nó. Như bạn có thể thấy từ bảng ở cuối mục nhập, với cùng số byte được phân bổ cho các giá trị int float và long int, phạm vi giá trị cho phép của chúng khác nhau rất nhiều do hình thức đại diện nội bộ.

Bộ xác định dài trước tên loại kép cho biết rằng 10 byte được phân bổ cho giá trị của nó.

Các hằng số dấu phẩy động có kiểu double theo mặc định. Bạn có thể chỉ định rõ ràng loại hằng số bằng cách sử dụng các hậu tố F, f (float) và L, l (long). Ví dụ: hằng số 2E+6L sẽ có kiểu long double và hằng số 1,82f sẽ có kiểu float.

Để viết di động nền tảng khác nhau các chương trình không thể đưa ra giả định về kích thước của kiểu int. Để có được nó, bạn phải sử dụng thao tác sizeof, kết quả của thao tác này là kích thước của loại tính bằng byte. Ví dụ, đối với phòng mổ Hệ thống MS-DOS sizeof(int) sẽ cho kết quả là 2, nhưng trên Windows 98 hoặc OS/2 kết quả sẽ là 4.

Tiêu chuẩn ANSI không chỉ định phạm vi giá trị cho các loại cơ bản; chỉ xác định mối quan hệ giữa các kích thước của chúng, ví dụ:

sizeof(float) ≤ slzeof(double) ≤ sizeof(dài gấp đôi)
sizeof(char) ∆ slzeof(ngắn) ∆ sizeof(int) ∆ sizeof(dài)

Ghi chú

Giá trị tối thiểu và tối đa được phép cho các loại số nguyên phụ thuộc vào việc triển khai và được đưa ra trong tệp tiêu đề (), đặc điểm của kiểu thực - trong file (), cũng như trong mẫu lớp Number_limits

gõ khoảng trống

Ngoài những loại được liệt kê, các loại ngôn ngữ chính bao gồm loại void, nhưng tập hợp các giá trị của loại này trống. Nó được sử dụng để xác định các hàm không trả về một giá trị, để chỉ định một danh sách trống các đối số của hàm, làm kiểu cơ sở cho con trỏ và trong các thao tác truyền kiểu.

Phạm vi giá trị của các kiểu dữ liệu đơn giản trong C++ dành cho máy tính tương thích với PC IBM

Hỏi: Thuật ngữ máy tính tương thích với PC IBM có nghĩa là gì?
Đáp: Máy tính tương thích với IBM PC là máy tính có kiến ​​trúc gần giống với IBM PC, XT và AT. IBM PC tương thích máy tính được xây dựng trên bộ vi xử lý tương thích với Intel 8086 (và như đã biết, tất cả các bộ xử lý Intel sau này đều tương thích ngược hoàn toàn với 8086). Trên thực tế, hầu hết đây đều là những máy tính hiện đại.

Nhiều loại số nguyên và loại thực, khác nhau về phạm vi và độ chính xác của biểu diễn dữ liệu, đã được giới thiệu nhằm giúp người lập trình có cơ hội sử dụng hiệu quả nhất khả năng của thiết bị cụ thể, vì tốc độ tính toán và dung lượng bộ nhớ phụ thuộc vào sự lựa chọn của loại. Nhưng một chương trình được tối ưu hóa cho bất kỳ loại máy tính nào có thể không thể chuyển sang các nền tảng khác, vì vậy trường hợp chung Nên tránh sự phụ thuộc vào các đặc điểm cụ thể của kiểu dữ liệu.

Kiểu Phạm vi giá trị Kích thước (byte)
bool đúng và sai 1
ký tự đã ký -128 … 127 1
ký tự không dấu 0 … 255 1
int ngắn đã ký -32 768 … 32 767 2
int ngắn không dấu 0 … 65 535 2
ký dài int -2 147 483 648 … 2 147 483 647 4
int dài không dấu 0 … 4 294 967 295 4
trôi nổi 3,4e-38 … 3,4e+38 4
gấp đôi 1.7e-308 … 1.7C+308 8
dài gấp đôi 3,4e-4932 … 3,4e+4932 10

Đối với các loại thực, bảng hiển thị giá trị tuyệt đối giá trị tối thiểu và tối đa.

Trả lời:
  1. Các kiểu dữ liệu số nguyên:

int ngắn, int ngắn không dấu, int, int không dấu, dài, dài không dấu.

  1. Các kiểu dữ liệu dấu phẩy động (tương ứng với kiểu thực):

phao, gấp đôi, dài gấp đôi.

  1. Kiểu dữ liệu ký tự:

char (char có dấu), char không dấu, wchar_t.

  1. Kiểu dữ liệu Boolean:

bool.

  1. Kiểu dữ liệu liệt kê (được giới thiệu trong Visual C++):

enum.

2. Đặc điểm của việc sử dụng kiểu dữ liệu số nguyên là gì?

Trong C++, các kiểu dữ liệu số nguyên chính là: short int, unsigned short int, int, unsigned int, long (long int), unsigned long (unsigned long int).

Các kiểu dữ liệu này biểu thị các giá trị từ một tập hợp các số nguyên. Ví dụ:

2 -100 398

Các kiểu dữ liệu bắt đầu bằng tiền tố không dấu chỉ có thể chứa số dương.

Dữ liệu kiểu int short, unsigned short int chiếm một nửa dung lượng bộ nhớ so với dữ liệu kiểu int, unsigned int.

Dữ liệu kiểu long, unsigned long chiếm dung lượng bộ nhớ gấp đôi so với dữ liệu kiểu int, unsigned int.

3. Làm thế nào để mô tả biến x có kiểu số nguyên trong chương trình?

Trả lời:
int x; // số nguyên có dấu

Kết quả là, dưới biến x một không gian bộ nhớ 4 byte sẽ được phân bổ. Kích thước bộ nhớ được phân bổ cho một biến phụ thuộc vào đặc điểm của máy tính, loại hệ điều hành và cài đặt trình biên dịch.

4. Làm thế nào để viết số 239 thành biến số nguyên?

Để thực hiện việc này, hãy sử dụng toán tử gán, được biểu thị bằng ký hiệu '='.

Trả lời 1. Nhập một số vào một biến sau mô tả của nó.

int x; x = 239;

Trả lời 2. Nhập một số vào một biến trong quá trình mô tả nó (khởi tạo ban đầu).

int x = 239;

5. Đặc điểm của kiểu dữ liệu dấu phẩy động là gì?

Các kiểu dữ liệu dấu phẩy động cho phép bạn biểu diễn các giá trị từ một tập hợp số thực. Ví dụ:

8.35 -990.399 239.0.

C++ có các kiểu dữ liệu dấu phẩy động cơ bản sau:

phao, gấp đôi, dài gấp đôi.

Một biến kiểu double chiếm dung lượng trong bộ nhớ máy tính gấp 2 lần so với biến kiểu float.

Ngoài ra, biến loại kép dài chiếm dung lượng trong bộ nhớ máy tính nhiều gấp 2 lần so với biến loại kép.

6. Làm thế nào để mô tả một biến nhận giá trị dấu phẩy động?

Ví dụ mô tả các biến kiểu float, double, long double:

phao f; đôi d; ld dài gấp đôi;

7. Làm thế nào để ghi giá trị số vào biến dấu phẩy động?

Ví dụ nhập dữ liệu số vào biến dấu phẩy động:

phao f = -9928,45; // khởi tạo ban đầu đôi d; ld dài gấp đôi; d = 0,445332; // toán tử gán ld = 3892923898239.030903; // toán tử gán

8. Làm thế nào để chuyển đổi biến float thành kiểu int?

Để làm điều này, thao tác truyền kiểu được sử dụng. Trong dấu ngoặc đơn, bạn cần chỉ ra tên của loại mà quá trình truyền được thực hiện.

thả nổi một; int b; a = 8,457; b = (int ) a; // b = 8

Khi sử dụng các thao tác truyền kiểu, bạn cần tính đến các hạn chế áp dụng cho các kiểu chiếm ít dung lượng hơn trong bộ nhớ máy tính.

Ví dụ: một biến kiểu short int có thể biểu thị một phạm vi số nhỏ hơn các biến kiểu float hoặc double. Danh sách sau đây tràn giá trị trong loại biến int ngắn:

int ngắn tôi; phao f; f = 3990099,8; tôi = (int )f; // i = -7597 - tràn

9. Làm thế nào để chuyển một biến từ kiểu int sang kiểu double?

Ví dụ về chuyển từ int sang double:

int tôi; đôi d; tôi = 982; d = (gấp đôi)i; // d = 982,0

10. Việc sử dụng dữ liệu char (dữ liệu ký tự) trong chương trình có những đặc điểm gì?

Dữ liệu kiểu char biểu thị giá trị ký tự của mã được nhập từ bàn phím. Mã ký hiệu là một số nguyên.

Ví dụ: mã cho ký tự 'f' là 102.

Một đoạn mã tính toán mã ký tự:

mã int; ký hiệu char; ký hiệu = "f"; ký hiệu mã = ​​(int ); // mã = ​​102

Dữ liệu kiểu char là các số nguyên giống nhau. Dữ liệu kiểu char chiếm 1 byte trong bộ nhớ máy tính.

Mối quan hệ ký tự với mã nằm trong bảng ký hiệu Windows. Các ký tự có mã từ 0 đến 127 là các ký tự BIOS dành riêng. Chúng bao gồm các ký hiệu, ký hiệu số và ký hiệu Latin được sử dụng phổ biến nhất. Những ký tự này không thể thay đổi.

Các ký tự có mã từ 128 đến 255 là các ký tự vùng được gắn với một bảng chữ cái cụ thể của máy tính mà trên đó hệ điều hành Các cửa sổ.

11. Đặc điểm của việc sử dụng kiểu dữ liệu bool (kiểu logic) là gì?

Các biến kiểu bool chỉ có thể nhận hai giá trị:

đúng - sự thật,

sai - sai.

Các biến này được sử dụng để kiểm tra biểu thức logic. Giá trị số của true là 1. Giá trị số của false là 0 .

Đoạn mã xác định các giá trị số true và false :

kết quả int; bool b; kết quả = (int)true; // kết quả = 1 b = sai; kết quả = (int )b; // kết quả = 0

Đoạn mã chuyển đổi kiểu int và float thành bool:

int tôi; phao f; bool b; tôi = 6; b = (bool )i; // b = Đúng f = 0,0; b = (bool )f; // b = Sai

12. Làm cách nào để xác định kích thước bộ nhớ bị chiếm bởi một biến thuộc loại nhất định?

Hoạt động sizeof() được sử dụng cho việc này.

Đoạn mã xác định kích thước của một số loại dữ liệu:

int d; d = sizeof(char); // d = 1 d = sizeof(unsign int); // d = 4 d = sizeof(float); // d = 4 d = sizeof(gấp đôi); // d = 8

13. Các biến có kiểu khác nhau được khởi tạo như thế nào?

int d = 28; float z = (float )2,85; char c="k" ; Chuỗi ^s = "Xin chào!" ; gấp đôi r = -8,559;

14. Làm thế nào để xác định giá trị tối đa cho phép (tối thiểu cho phép) của một biến thuộc một loại nhất định?

Để xác định giá trị tối đa được phép hoặc giá trị tối thiểu được phép của một biến thuộc loại nào đó trong tệp . Nền tảng NET Các thuộc tính MaxValue và MinValue được sử dụng.

Ví dụ về xác định giá trị giới hạn của biến các loại khác nhau.

Đối với các biến kiểu int :

// gõ int int tôi; MaxInt dài; MinInt dài; MaxInt = (dài)i.MaxValue; // MaxInt = 2147483647 MinInt = (dài)i.MinValue; // MinInt = -2147483648

Đối với các biến kiểu short int :

// gõ int ngắn int ngắn; int MaxInt; int MinInt; MaxInt = (int )si.MaxValue; // MaxInt = 32767 MinInt = (int )si.MinValue; // MinInt = -32768

Đối với các biến kiểu unsigned int :

// gõ unsigned int unsigned int ui; int không dấu MaxInt; unsigned int MinInt; MaxInt = ui.MaxValue; // MaxInt = 4294967295 MinInt = ui.MinValue; // MinInt = 0

Đối với các biến float:

// kiểu phao phao f; thả nổi MaxF; thả nổi MinF; MaxF = f.MaxValue; // MaxF = 3.402823E+38 MinF = f.MinValue; // MinF = -3.402823E+38

Đối với các biến kiểu double:

// gõ gấp đôi đôi d; MaxD gấp đôi; gấp đôi MinD; Max = d.MaxValue; // Tối đa = 1.79769313486232E+308 Min = d.MinValue; // Tối thiểu = -1.79769313486232E+308

Đối với các biến kiểu char:

// gõ char ký tự c; int MaxC; int MinC; Max = (int )c.MaxValue; // Tối đa = 127 Min = (int )c.MinValue; // Tối thiểu = -128

15. Đặc điểm của việc sử dụng kiểu enum là gì?

Kiểu enum là kiểu dữ liệu liệt kê. Nó chỉ định các giá trị ghi nhớ cho tập hợp các giá trị nguyên. Mỗi giá trị ghi nhớ có một nội dung cụ thể và được biểu thị bằng một số nguyên.

Một ví dụ về việc sử dụng kiểu enum để biểu thị các tháng trong năm:

tháng enum (tháng 1, tháng 2, tháng 3, tháng 4, tháng 5, tháng 6, tháng 7, tháng 8, tháng 9, tháng 10, tháng 11, tháng 12) triệu; mn = tháng Giêng; // mn = 0 mn = tháng 3; // mn = 2 mn = tháng 9; // mn = 8

Ví dụ dưới đây mô tả một biến có tên mn thuộc loại enum tháng. Giá trị ghi nhớ của các tháng (tháng 1, tháng 2,…) bắt đầu từ 0 (0, 1, 2,…). Giá trị ghi nhớ tháng 1 là giá trị số nguyên 0, giá trị ghi nhớ tháng 2 là số nguyên 1, v.v.

Vì vậy, bằng cách sử dụng kiểu enum, tính năng ghi nhớ có thể được sử dụng trong văn bản chương trình để mã nguồn rõ ràng hơn.

Bạn cũng có thể viết nó như thế này:

mn = (enum tháng)2; // mn = tháng 3 mn = (enum tháng)11; // mn = Tháng 12

16. Đặc điểm của loại hình là gìtrống rỗng trong các chương trình trênC++ ?

Kiểu dữ liệu trốngđược sử dụng trong các trường hợp sau:

  • nếu bạn cần mô tả một hàm không trả về bất kỳ giá trị nào (xem ví dụ);
  • nếu bạn cần mô tả một hàm không nhận tham số (xem ví dụ).

Ví dụ. MyFun() là hàm không tham số, không trả về giá trị nào (trả về kiểu void ) và không nhận tham số.

công khai : void MyFun(void ) { // thân hàm // ... trở lại; // trả về từ một hàm không trả về giá trị } // gọi một hàm từ chương trình ... Niềm vui của tôi(); ...

17. Có thể khai báo biến kiểu khôngtrống rỗng trong một chương trình?

Điều này là không thể vì kiểu void không được liên kết với một giá trị.

Khai báo một biến kiểu void dẫn đến lỗi biên dịch với thông báo sau:

"Sử dụng trái phép loại void"

18. Đặc điểm của loại hình là gìwchar_ t V.Thị giác C++ ?

Các biến kiểu char (xem các đoạn trước) được sử dụng để lưu trữ các ký tự ASCII 8 bit.

Loại wchar_t được sử dụng để lưu trữ các ký tự là một phần của bộ ký tự lớn. Ví dụ, trong bảng chữ cái tiếng Trung có số lượng lớn nhân vật. 8 chữ số không đủ để thể hiện toàn bộ bộ ký tự tiếng Trung. Vì vậy, nếu bạn có nhu cầu sử dụng chương trình trên thị trường quốc tế thì nên thay thế kiểu char bằng wchar_t.

Ví dụ sử dụng loại wchar_t.

... wchar_t t; // 2 byte bộ nhớ được phân bổ cho biến t t = "s"; ...

Mọi người đều biết rằng chỉ có thể cộng và trừ những đại lượng cùng loại. Ví dụ, táo có thể được tính bằng táo, nhưng táo không thể được tính bằng mét vuông hoặc nhiệt độ. Hầu hết các ngôn ngữ thuật toán hiện đại đều có những hạn chế tương tự.

Tương tự như đồ vật thông thường có các loại đặc điểm về màu sắc (đỏ, xanh, vàng, xanh), vị (đắng, chua, ngọt), số lượng (một rưỡi, hai, bảy); trong ngôn ngữ lập trình MQL4, dữ liệu khác nhau tùy theo loại. Khi nói về kiểu dữ liệu, chúng tôi muốn nói đến loại giá trị của hằng, biến và giá trị được hàm trả về (khái niệm về hàm sẽ được thảo luận trong phần Hàm).

Trong ngôn ngữ MQL4, các loại sau được phân biệt (hằng, biến và giá trị được hàm trả về):

Kiểu int

Loại giá trị int- đây là những số nguyên. Loại này bao gồm các giá trị không thể thiếu về bản chất. Ví dụ về số nguyên bao gồm: số thanh trong cửa sổ của một công cụ tài chính (16.000 thanh), số lượng lệnh mở và đang chờ xử lý (3 lệnh), khoảng cách tính bằng điểm từ tỷ giá hiện tại của công cụ tài chính đến giá mở lệnh (15 điểm). Số lượng đối tượng như sự kiện cũng chỉ có thể là số nguyên. Ví dụ: số lần thử mở một lệnh không thể là một rưỡi mà chỉ có một, hai, ba, v.v.

Có 2 loại giá trị nguyên:

  • Số thập phân các giá trị có thể bao gồm các số 0 - 9 và có thể dương hoặc âm: 10, 11, 12, 1, 5, -379, 25, -12345, -1, 2.
  • thập lục phân các giá trị có thể bao gồm các chữ cái trong bảng chữ cái Latinh từ A đến F hoặc từ a đến f, các số từ 0 đến 9, phải bắt đầu bằng 0x hoặc 0X và nhận các giá trị dương và âm: 0x1a7b, 0xff340, 0xAC3 0X2DF23, 0X13AAB, 0X1 .

Các giá trị của kiểu int phải nằm trong phạm vi số từ -2,147,483,648 đến 2,147,483,647, nếu giá trị của hằng hoặc biến nằm ngoài phạm vi chỉ định thì kết quả của chương trình sẽ không được xác định. Trong bộ nhớ máy tính, giá trị của các hằng và biến kiểu int chiếm 4 byte.

Một ví dụ về sử dụng biến int trong chương trình:

int Nghệ thuật = 10; // Ví dụ về biến số nguyên
int B_27 = - 1 ; // Ví dụ về biến số nguyên
int Số = 21 ; // Ví dụ về biến số nguyên
int Max = 2147483647 ; // Ví dụ về biến số nguyên
int Min = - 2147483648 ; // Ví dụ về biến số nguyên

Gõ đôi

Loại giá trị gấp đôi- Cái này số thực chứa đựng phần phân đoạn.

Ví dụ về các giá trị thuộc loại này là bất kỳ đại lượng nào có giá trị có thể có phần phân số: góc nghiêng của đường hỗ trợ, giá của một công cụ tài chính, số lượng lệnh trung bình được mở trong ngày.

Đôi khi, khi viết chương trình, khó khăn có thể nảy sinh trong việc xác định loại biến, nghĩa là người lập trình không rõ ngay loại biến đó (int hay double). Hãy xem xét ví dụ nhỏ:

Chương trình mở 12 đơn hàng trong vòng một tuần. Loại biến A nào sẽ tính đến số lượng lệnh trung bình được mở bởi chương trình này mỗi ngày? Hiển nhiên đáp án là: A = 12 đơn hàng/5 ngày. Nghĩa là, biến A = 2.4 nên được tính đến trong chương trình dưới dạng gấp đôi, bởi vì giá trị này có một phần phân số. Và biến A này sẽ thuộc loại nào nếu tổng số lệnh mở mỗi tuần là 10? Có vẻ như nếu 2 (10 đơn hàng / 5 ngày = 2) không có phần phân số thì biến A có thể được coi là int. Tuy nhiên, lý luận này là sai lầm. Giá trị hiện tại của một số biến có thể có phần phân số chỉ bao gồm các số 0. Nhưng điều quan trọng là giá trị của biến này vốn có giá trị. Trong trường hợp này, biến A cũng phải thuộc loại double và khi viết hằng trong chương trình phải hiển thị dấu chia: A = 2.0


Giá trị của các hằng và biến thực gồm phần nguyên, dấu thập phân (.) và phần phân số. Họ có thể lấy giá trị tích cực và tiêu cực. Phần nguyên và phần phân số được tạo thành từ các số 0 - 9. Số chữ số có nghĩa sau dấu thập phân có thể lên tới 15. Ví dụ:

27.12 -1.0 2.5001 -765456.0 198732.07 0.123456789012345

Phạm vi của các giá trị kép là từ -1,7 * e-308 đến 1,7 * e308. Trong bộ nhớ máy tính, các giá trị của hằng và biến kiểu kép chiếm 8 byte.

Một ví dụ về việc sử dụng biến kép trong chương trình:

nghệ thuật gấp đôi = 10,123 ;
gấp đôi B_27 = - 1,0; // Ví dụ về biến thực
số gấp đôi = 0,5; // Ví dụ về biến thực
gấp đôi MMM = - 12,07; // Ví dụ về biến thực
gấp đôi Giá_1 = 1,2756 ; // Ví dụ về biến thực

Nhập bool

Loại giá trị bool- đây là các giá trị kiểu logic, nội dung của nó là sai và đúng.

Để hiểu rõ hơn ý nghĩa của khái niệm kiểu logic, chúng ta hãy xem xét một ví dụ nhỏ từ cuộc sống hàng ngày. Giả sử rằng một giáo viên cần theo dõi sách giáo khoa của học sinh. Trong trường hợp này, giáo viên sẽ lập danh sách học sinh trên một tờ giấy và ở bên phải dòng sẽ ghi chú xem học sinh đó có sách giáo khoa hay không. Ví dụ: anh ta có thể đánh dấu và gạch ngang:

Danh sách sinh viên sách giáo khoa vật lý Sách giáo khoa sinh học sách giáo khoa hóa học
1 Ivanov V. - -
2 Petrov V. - V.
3 Sidorov - V. V.
... ... ... ... ...
25 Mironov V. V. V.

Các giá trị ở cột bên phải sẽ chỉ nhận 2 giá trị có thể là true hoặc false. Các giá trị này không thể được phân loại thành các kiểu dữ liệu đã thảo luận trước đó vì chúng không phải là số. Chúng cũng không phải là các giá trị về màu sắc, mùi vị, số lượng, v.v. Tuy nhiên, chúng mang một tải ngữ nghĩa quan trọng. Trong ngôn ngữ MQL4, các giá trị như vậy được gọi là logic. Một đặc điểm của các hằng và biến kiểu bool là chúng chỉ có thể nhận 2 giá trị có thể - true (true, True, TRUE, 1) hoặc false (false, False, FALSE, 0). Trong bộ nhớ máy tính, các giá trị của hằng và biến kiểu bool chiếm 4 byte.

Một ví dụ về việc sử dụng biến kiểu bool trong chương trình:

bool aa = Đúng; // Biến Boolean aa có giá trị true
bool B17 = TRUE ; // Biến Boolean B17 là đúng
bool Hamma = 1 ; // Biến Boolean Hamma là đúng

bool Asd = Sai; // Biến Boolean Asd là sai
bool Nol = FALSE ; // Biến Boolean Nol là sai
bool Prim = 0 ; // Biến Boolean Prim là sai

Nhập chuỗi

Giá trị loại sợi dây- đây là ý nghĩa kiểu chuỗi, là một tập hợp các ký tự mã ASCII.

Trong cuộc sống đời thường, tên của các cửa hàng, nhãn hiệu ô tô, v.v. đều có nội dung tương tự nhau, giá trị kiểu chuỗi được viết dưới dạng một tập hợp các ký tự được đặt trong dấu ngoặc kép (đừng nhầm lẫn dấu ngoặc kép với hai dấu ngoặc đơn!). Dấu ngoặc kép chỉ được sử dụng để biểu thị phần đầu và phần cuối của giá trị của một hằng chuỗi và bản thân giá trị đó là một tập hợp các ký tự được bao quanh bởi dấu ngoặc kép.

Nếu bạn cần nhập dấu ngoặc kép " vào một chuỗi thì bạn phải đặt trước nó một ký tự dấu gạch chéo ngược: \. Bất kỳ hằng ký tự đặc biệt nào cũng có thể được nhập vào chuỗi, trước ký tự dấu gạch chéo ngược \. Độ dài của hằng số chuỗi là từ 0 đến 255 ký tự. Nếu độ dài của hằng chuỗi vượt quá mức tối đa, ký tự phụở bên phải sẽ bị loại bỏ và trình biên dịch đưa ra cảnh báo tương ứng. Sự kết hợp của hai ký tự, ký tự đầu tiên là dấu gạch chéo ngược \, thường phổ biến và được hầu hết các chương trình hiểu là dấu hiệu thực hiện định dạng văn bản nhất định. Sự kết hợp này không được hiển thị trong văn bản. Ví dụ: sự kết hợp \n biểu thị sự cần thiết phải ngắt dòng, \t biểu thị một tab, v.v.

Giá trị loại chuỗi được viết dưới dạng tập hợp các ký tự được đặt trong dấu ngoặc kép: "MetaTrader 4", "Stop Loss", "Ssssstop_Loss", "stoploss", "10 pip". Thực ra Chuỗi giá trị là tập hợp các ký tự bên trong dấu ngoặc kép. Dấu ngoặc kép chỉ được sử dụng để biểu thị ranh giới của một giá trị. Biểu diễn bên trong là cấu trúc 8 byte.

Một ví dụ về việc sử dụng biến chuỗi trong chương trình:

Tiền tố chuỗi = "MetaTrader 4";
chuỗi Postfix = "_of_my_progr. OK"; // Ví dụ về biến chuỗi
chuỗi Name_Mass = "Lịch sử"; // Ví dụ về biến chuỗi
văn bản chuỗi ="Dòng trên cùng\ n Dòng dưới cùng"; // văn bản chứa dòng mới

Nhập màu

Giá trị loại màu sắc- đây là ý nghĩa loại màu.

Mọi người đều biết màu sắc có nghĩa là gì: xanh dương, đỏ, trắng, vàng, xanh lá cây. Không khó để tưởng tượng một biến hoặc hằng số loại màu có nghĩa là gì. Đây là một hằng số hoặc biến có giá trị là màu sắc. Điều này có vẻ hơi bất thường nhưng thực chất nó rất đơn giản. Giống như giá trị của hằng số nguyên là một số, giá trị của hằng số màu là một màu.

Các giá trị của hằng số màu và biến có thể được biểu diễn theo một trong ba loại:

  • chữ

    Giá trị loại màu, được chỉ định dưới dạng chữ, bao gồm Ba phần, biểu thị các giá trị số về cường độ của ba thành phần chính của màu sắc: đỏ, lục và lam. Loại giá trị này bắt đầu bằng ký tự C và được bao quanh bởi dấu ngoặc đơn.

    Các giá trị số cho cường độ của thành phần màu nằm trong khoảng từ 0 đến 255 và có thể được viết ở định dạng thập phân hoặc thập lục phân.

    Ví dụ: C"128,128,128" (màu xám), C"0x00,0x00,0xFF" (màu xanh), C"0xFF,0x33,0x00" (màu đỏ).

  • Biểu diễn số nguyên

    Biểu diễn số nguyên được viết dưới dạng thập lục phân hoặc số thập phân. Số thập lục phân có dạng 0xRRGGBB, trong đó RR là giá trị cường độ của thành phần màu đỏ, GG là thành phần màu xanh lá cây và BB là thành phần màu xanh lam. Hằng số thập phân không có sự phản ánh trực tiếp trong RGB. Chúng đại diện cho giá trị thập phân của biểu diễn số nguyên thập lục phân.

    Việc biểu diễn các giá trị loại màu dưới dạng số nguyên và chữ thập lục phân rất thuận tiện. Văn bản hiện đại nhất và biên tập viên đồ họa thể hiện thông tin về nội dung của các thành phần màu đỏ, xanh lam và xanh lục trong giá trị màu đã chọn. Chỉ cần chọn màu mong muốn trong trình chỉnh sửa và viết lại các số được xác định theo cách này thành cách thể hiện giá trị màu thích hợp là đủ.

    Ví dụ: 0xFFFFFF (màu trắng), 0x008000 (màu xanh lá cây), 16777215 (màu trắng), 32768 (màu xanh lá cây).


    Cơm. 11. Trong các trình soạn thảo hiện đại, bạn có thể lấy các tham số màu để biểu diễn bằng chữ và số nguyên cho giá trị màu của một hằng số.

  • Tên màu

    Cách dễ nhất để chỉ định màu là chỉ định tên của nó theo bảng màu Web. Trong trường hợp này, ý nghĩa của màu sắc được thể hiện bằng một từ liên quan đến màu sắc, ví dụ: Đỏ - đỏ.

    Đen Màu xanh lá cây đậm TốiĐá phiếnMàu xám Ôliu Màu xanh lá màu xanh mòng két Hải quân Màu tím
    Bỏ rơi xanh đậm Màu xanh nửa đêm Xanh đậm TốiOliveMàu xanh lá cây Yên xe màu nâu Rừng xanh Màu xám ô liu
    biển xanh Bóng tốiGoldenrod TốiĐá phiếnMàu xanh Sienna Xanh nhẹ Màu nâu TốiTurquoise DimGray
    Ánh SángBiểnMàu Xanh Lá Cây Màu tím đậm gạch lửa Trung bìnhTímMàu đỏ Trung bìnhBiểnMàu xanh lá cây Sô cô la màu đỏ thẫm Màu xanh thép
    Goldenrod Trung bìnhMùa xuânMàu xanh lá cây Cỏ xanh Xanh chói Phong Lan Tối Màu vàngMàu xanh lá cây vôimàu xanh lá cây CamMàu Đỏ
    Màu cam đậm Quả cam Vàng Màu vàng Biểu đồ Chanh xanh Xuân xanh Thủy
    Bầu trời xanh thẳm Màu xanh da trời Màu đỏ tươi Màu đỏ Xám Phiến đá xám Peru BlueViolet
    Ánh sángĐá phiếnMàu xám Màu hồng đậm Trung bìnhNgọc lam DodgerMàu Xanh màu ngọc lam Xanh đậm Màu xanh đá phiến Vải kaki màu thẫm
    Ấn ĐộMàu Đỏ Trung Phong Lan Màu xanh lá câyVàng Aquamarine trung bình TốiBiểnMàu Xanh Lá Cây Cà chua màu nâu hồng phong lan
    Trung bìnhTím NhạtTímMàu Đỏ San hô Màu xanh hoa ngô đồng Màu xám đen cát nâu Trung bìnhđá phiếnMàu xanh Tân
    cá hồi tối Gỗ lớn HotPink cá hồi màu tím ánh sángSan hô Trời xanh Ánh SángCá ​​Hồi
    Mận kaki Màu xanh lợt Aquamarine Bạc Ánh SángBầu TrờiMàu Xanh Ánh SángThépMàu Xanh Ánh sáng xanh
    Xanh nhạt Cây kế bộtmàu xanh NhạtGoldenrod Màu ngọc lam nhạt Xám nhạt Lúa mì NavajoTrắng
    giày da đanh Màu hồng nhạt Gainsboro PeachPuff Hồng bánh quy Ánh SángGoldenrod hạnh nhân chần
    chanhvoan Be CổTrắng đu đủ roi Râu ngô Ánh sángVàng Ánh sángCyan Lanh
    Hoa oải hương MistyRose CũRen Khói trắng Vỏ sò Ngà voi mật ngọt AliceBlue
    Hoa Oải HươngĐỏ Mặt kem bạc hà Tuyết Trắng



Trong bộ nhớ máy tính, các giá trị của hằng và biến kiểu màu chiếm 4 byte. Một ví dụ về việc sử dụng một biến như vậy trong một chương trình:

màu Paint_1 = C" 128 , 128 , 128 "; // Biến được gán giá trị grey
màu Colo = C " 0 x00 , 0 x00 , 0 xFF "; // Biến được gán giá trị màu xanh
màu BMP_4 = C" 0 xFF , 0 x33 , 0 x00 "

màu K_12 = 0 xFF3300 ; // Biến được gán giá trị màu đỏ
màu N_3 = 0 x008000 ;
màu Màu = 16777215 ;
màu Alfa = 32768 ; // Biến được gán giá trị xanh

màu A = Đỏ; // Biến được gán giá trị màu đỏ
màu B = Vàng ; // Biến được gán giá trị màu vàng
màu sắc Màu sắc = Đen; // Biến được gán giá trị màu đen
màu B_21 = Trắng ; // Biến được gán giá trị màu trắng

kiểu ngày giờ

Giá trị loại ngày giờ là giá trị ngày và giờ.

Các giá trị thuộc loại này có thể được sử dụng trong các chương trình để phân tích thời điểm bắt đầu hoặc kết thúc của bất kỳ sự kiện nào, bao gồm việc phát hành tin tức quan trọng, bắt đầu/kết thúc một ngày làm việc, v.v. Các hằng số ngày và giờ có thể được biểu diễn dưới dạng một chuỗi chữ, bao gồm 6 phần, đại diện giá trị số năm, tháng, ngày (hoặc ngày, tháng, năm), giờ, phút và giây.

Hằng số được bao quanh bởi dấu ngoặc đơn và bắt đầu bằng ký tự D. Cho phép giá trị bị cắt ngắn: không có ngày, không có thời gian hoặc giá trị trống. Phạm vi thay đổi giá trị: từ ngày 1 tháng 1 năm 1970 đến ngày 31 tháng 12 năm 2037. Trong bộ nhớ máy tính, các giá trị của hằng và biến kiểu ngày giờ chiếm 4 byte. Giá trị biểu thị số giây đã trôi qua kể từ 00:00 ngày 1 tháng 1 năm 1970.

Một ví dụ về việc sử dụng biến kiểu ngày giờ trong chương trình:

ngày giờ Alfa = D "2004.01.01 00: 00"; // Năm mới
ngày giờ Tim = D "01/01/2004"; // Năm mới
ngày giờ Tims = D "2005.05.12 16:30:45";
ngày giờ N_3 = D "12/05/2005 16:30:45"; // Ngày 12 tháng 5 năm 2005 16 giờ 30 phút 45 giây
Biên dịch ngày giờ = D ""; // tương đương với D"[ngày biên dịch] 00:00:00"

Khai báo và khởi tạo biến

Để đảm bảo rằng trong quá trình tính toán, chương trình không có câu hỏi về loại dữ liệu mà biến này hoặc biến đó thuộc về, trong MQL4, quy tắc bắt buộc là phải chỉ rõ loại biến ngay từ đầu chương trình. Trước khi một biến có thể bắt đầu tham gia vào bất kỳ phép tính nào, nó phải được khai báo.

Sự định nghĩa biến- đây là lần đầu tiên đề cập đến một biến trong chương trình. Khi khai báo một biến, kiểu của nó sẽ được chỉ định.

Đang khởi tạo một biến- đây là gán cho nó, khi khai báo nó, một giá trị tương ứng với loại của nó. Bất kỳ biến nào cũng có thể được khởi tạo. Nếu không có giá trị ban đầu nào được chỉ định rõ ràng thì biến số được khởi tạo bằng 0 (0) và biến chuỗi được khởi tạo thành chuỗi trống.

Một biến có thể được khai báo trên một dòng riêng:

int Var_1 ; // Khai báo một biến trên một dòng riêng biệt

Mục nhập này có nghĩa là biến Var_1 (chính khai báo biến) sẽ được sử dụng và kiểu của biến này là int.

Được phép khai báo nhiều biến cùng loại trên một dòng:

int Var_1, Hộp, Dấu phẩy; // Khai báo nhiều biến trên một dòng

Mục nhập này có nghĩa là các biến Var_1, Box và Comm sẽ được sử dụng và kiểu của các biến này là int, tức là các biến được liệt kê sẽ được chương trình tính đến như các biến kiểu số nguyên.


Nó được phép khởi tạo các biến trong các câu lệnh:

gấp đôi Var_5 = 3,7 ; // Khởi tạo một biến trong câu lệnh gán

Mục này có nghĩa là biến Var_5 sẽ được sử dụng loại thực Với giá trị ban đầu 3.7.

Không có nơi nào trong các dòng tiếp theo của chương trình có loại biến được chỉ định. Tuy nhiên, mỗi khi chương trình truy cập vào một biến, nó sẽ nhớ rằng biến này thuộc loại được chỉ định khi nó được khai báo. Khi quá trình tính toán diễn ra trong chương trình, giá trị của các biến có thể thay đổi nhưng loại của biến không thay đổi.

Tên của biến không liên quan gì đến loại biến, tức là. Không thể đánh giá loại của nó bằng tên của một biến. Tên biến giống nhau trong các chương trình khác nhau có thể được sử dụng cho các biến thuộc bất kỳ loại nào. Nhưng trong một chương trình, kiểu của bất kỳ biến nào cũng chỉ có thể được khai báo một lần. Trong quá trình thực hiện chương trình, kiểu của biến được khai báo không thay đổi.

Ví dụ về khai báo và khởi tạo biến

Việc khai báo biến có thể được thực hiện trên nhiều dòng hoặc trên một dòng.

Được phép khai báo nhiều biến cùng loại cùng một lúc. Trong trường hợp này, các biến được liệt kê cách nhau bằng dấu phẩy và dấu chấm phẩy được đặt ở cuối dòng.



Cơm. 12. Ví dụ khai báo biến trên một dòng riêng.


Loại biến được khai báo một lần, lần đầu tiên biến được nhắc đến. Lần đề cập thứ hai trở đi về một biến không chỉ ra loại của nó.



Cơm. 13. Ví dụ khai báo biến trên một dòng riêng.


Cho phép khai báo và khởi tạo các biến trong câu lệnh.



Cơm. 14. Ví dụ về khởi tạo biến.



Cơm. 15. Khởi tạo một biến trong phần đầu của câu lệnh ghép.

Để lưu trữ số thực, các kiểu dữ liệu float (độ chính xác đơn) và độ chính xác kép (độ chính xác kép) được sử dụng. Ý nghĩa của các dấu "+" và "-" đối với kiểu thực cũng giống như đối với kiểu số nguyên. Các số 0 đứng đầu cuối cùng bên phải dấu thập phân sẽ bị bỏ qua. Do đó, các mục +523.5, 523.5 và 523.500 đại diện cho cùng một giá trị.

Có hai định dạng được sử dụng để biểu diễn số thực:

điểm cố định

[dấu|phần nguyên].[phần phân số]

Ví dụ: –8,13; 0,168 (giống như 0,168); 183. (giống như 183.0).

dấu phẩy động (dạng mũ) mantissa E/e order

Ví dụ: 5,235e+02 (5,235 x 102 = 523,5); –3,4E-03 (–3,4 x 10-03 = – 0,0034)

Trong hầu hết các trường hợp, loại double được sử dụng; nó cung cấp độ chính xác cao hơn loại float. Độ chính xác tối đa và phạm vi số lớn nhất đạt được bằng cách sử dụng loại kép dài.

Một giá trị có bộ sửa đổi kiểu float mất 4 byte. Trong số này, 1 bit được phân bổ cho dấu, 8 bit cho số mũ thừa và 23 bit cho phần định trị. Lưu ý rằng bit quan trọng nhất của phần định trị luôn là 1, do đó nó không được điền và do đó phạm vi mô đun của biến dấu phẩy động là khoảng 3,14E–38 đến 3,14E+38.

Giá trị kép chiếm 8 byte trong bộ nhớ. Định dạng của nó tương tự như định dạng float. Các bit bộ nhớ được phân bổ như sau: 1 bit cho dấu, 11 bit cho số mũ và 52 bit cho phần định trị. Có tính đến bit cao bị bỏ qua của phần định trị, phạm vi mô đun của các giá trị biến có độ chính xác kép là từ 1,7E–308 đến 1,7E+308.

Giá trị kép dài giống như giá trị kép.

Ví dụ:

6. Kiểu dữ liệu ký tự (kiểu char)

Không có kiểu dữ liệu nào trong tiêu chuẩn C++ có thể được coi là ký tự thực sự. Để thể hiện thông tin ký tự, có hai loại dữ liệu phù hợp cho mục đích này: char và wchar_t.

Biến char được thiết kế để chỉ lưu trữ một ký tự (ví dụ: một chữ cái hoặc dấu cách). Trong bộ nhớ máy tính, các ký tự được lưu trữ dưới dạng số nguyên. Sự tương ứng giữa các ký tự và mã của chúng được xác định bởi bảng mã hóa, bảng này phụ thuộc vào máy tính và hệ điều hành. Hầu như tất cả các bảng mã hóa đều chứa chữ hoa và chữ thường của bảng chữ cái Latinh, các số 0, ..., 9 và một số ký tự đặc biệt. Bảng mã hóa phổ biến nhất là bảng ký tự ASCII ( Tiêu chuẩn Mỹ Mã cho Trao đổi thông tin - Mã tiêu chuẩn Mỹ về trao đổi thông tin).

Vì các ký tự được lưu trữ dưới dạng số nguyên trong bộ nhớ máy tính nên kiểu char thực sự là một tập hợp con của kiểu int.

1 byte được phân bổ cho giá trị loại ký tự.

Loại char có thể được sử dụng với các chỉ định có dấu và không dấu. Kiểu dữ liệu signature char có thể lưu trữ các giá trị trong phạm vi từ –128 đến 127. Với kiểu dữ liệu unsigned char, các giá trị có thể nằm trong phạm vi từ 0 đến 255. Mã hóa là ASCII. Các ký tự có mã từ 0 đến 31 là các ký tự dịch vụ và chỉ có ý nghĩa độc lập trong các câu lệnh I/O.

Các giá trị của kiểu char cũng được sử dụng để lưu trữ các số từ các phạm vi được chỉ định.

Loại wchar_t được thiết kế để hoạt động với một tập hợp các ký tự mà 1 byte không đủ để mã hóa, ví dụ như trong mã hóa Unicode. Kích thước của loại wchar_t là 2 byte. Nếu một chương trình cần sử dụng các hằng chuỗi kiểu wchar_t thì chúng được viết bằng tiền tố L, ví dụ: L "Word".

Ví dụ:

char r=("A","B","C","D","E","F","\0");

Cập nhật lần cuối: 17/09/2017

Mỗi biến có một loại cụ thể. Và loại này xác định một biến có thể có những giá trị nào, những thao tác nào có thể được thực hiện trên nó và nó sẽ chiếm bao nhiêu byte trong bộ nhớ. Các kiểu dữ liệu cơ bản sau được định nghĩa trong ngôn ngữ C++:

    bool: kiểu boolean. Có thể nhận một trong hai giá trị: true và false. Dấu chân bộ nhớ cho loại này không được xác định chính xác.

    char : đại diện cho một ký tự trong mã hóa ASCII. Chiếm 1 byte (8 bit) trong bộ nhớ. Có thể lưu trữ bất kỳ giá trị nào từ -128 đến 127 hoặc từ 0 đến 255

    signature char : Đại diện cho một ký tự đơn. Chiếm 1 byte (8 bit) trong bộ nhớ. Có thể lưu trữ bất kỳ giá trị nào từ -128 đến 127

    unsigned char : Đại diện cho một ký tự đơn. Chiếm 1 byte (8 bit) trong bộ nhớ. Có thể lưu trữ bất kỳ giá trị nào từ 0 đến 255

    wchar_t : Đại diện cho một ký tự rộng. Trên Windows nó chiếm 2 byte (16 bit) bộ nhớ, trên Linux nó chiếm 4 byte (32 bit). Có thể lưu trữ bất kỳ giá trị nào trong phạm vi từ 0 đến 65.535 (đối với 2 byte) hoặc từ 0 đến 4.294.967.295 (đối với 4 byte)

    char16_t : Đại diện cho một ký tự Unicode duy nhất. Chiếm 2 byte (16 bit) trong bộ nhớ. Có thể lưu trữ bất kỳ giá trị nào từ 0 đến 65.535

    char32_t : Đại diện cho một ký tự Unicode duy nhất. Chiếm 4 byte (32 bit) trong bộ nhớ. Có thể lưu trữ bất kỳ giá trị nào từ 0 đến 4.294.967.295

    short : Biểu thị một số nguyên trong phạm vi –32768 đến 32767. Chiếm 2 byte (16 bit) bộ nhớ.

    Loại này còn có các từ đồng nghĩa short int, signature short int, signature short.

    unsigned short: Biểu thị một số nguyên trong phạm vi từ 0 đến 65535. Chiếm 2 byte (16 bit) bộ nhớ.

    Loại này cũng có từ đồng nghĩa unsigned short int .

    int: đại diện cho một số nguyên. Tùy thuộc vào kiến ​​trúc bộ xử lý, nó có thể chiếm 2 byte (16 bit) hoặc 4 byte (32 bit). Phạm vi giá trị giới hạn tương ứng cũng có thể thay đổi từ –32768 đến 32767 (với 2 byte) hoặc từ −2,147,483,648 đến 2,147,483,647 (với 4 byte). Nhưng trong mọi trường hợp, kích thước phải lớn hơn hoặc bằng kích thước của loại ngắn và nhỏ hơn hoặc bằng kích thước của loại dài

    Loại này có từ đồng nghĩa signature int và signature .

    unsigned int : Biểu thị một số nguyên dương. Tùy thuộc vào kiến ​​trúc bộ xử lý, nó có thể chiếm 2 byte (16 bit) hoặc 4 byte (32 bit) và do đó, phạm vi giá trị giới hạn có thể thay đổi: từ 0 đến 65535 (đối với 2 byte) hoặc từ 0 đến 4.294.967.295 (cho 4 byte).

    unsigned có thể được sử dụng như một từ đồng nghĩa với loại này

    long : Biểu thị một số nguyên trong phạm vi −2,147,483,648 đến 2,147,483,647. Chiếm 4 byte (32 bit) bộ nhớ.

    bạn thuộc loại này Ngoài ra còn có các từ đồng nghĩa long int , signature long int và signature long

    unsigned long: Biểu thị một số nguyên trong phạm vi từ 0 đến 4.294.967.295. Chiếm 4 byte (32 bit) bộ nhớ.

    Có từ đồng nghĩa unsigned long int .

    dài dài: Biểu thị một số nguyên trong phạm vi −9,223,372,036,854,775,808 đến +9,223,372,036,854,775,807. Thường chiếm 8 byte (64 bit) bộ nhớ.

    Có từ đồng nghĩa long long int , signature long long int và signature long long .

    unsigned long long : Biểu thị một số nguyên trong phạm vi từ 0 đến 18,446,744,073,709,551,615. Thường chiếm 8 byte (64 bit) bộ nhớ.

    Có từ đồng nghĩa unsigned long long int .

    phao : đại diện số thựcđiểm nổi chính xác thông thường trong phạm vi +/- 3,4E-38 đến 3,4E+38. Chiếm 4 byte (32 bit) trong bộ nhớ

    double : Biểu thị số thực dấu phẩy động có độ chính xác kép trong phạm vi +/- 1.7E-308 đến 1.7E+308. Chiếm 8 byte (64 bit) trong bộ nhớ

    long double : Biểu thị số thực dấu phẩy động có độ chính xác kép tối thiểu 8 byte (64 bit). Tùy thuộc vào kích thước của bộ nhớ bị chiếm dụng, phạm vi giá trị hợp lệ có thể khác nhau.

    void: gõ không có giá trị

Do đó, tất cả các kiểu dữ liệu ngoại trừ void có thể được chia thành ba nhóm: ký tự (char, wchar_t, char16_t, char32_t), số nguyên (ngắn, int, dài, dài dài) và các loại số dấu phẩy động (float, double, long double).

Các loại ký tự

Các loại được sử dụng để biểu thị các ký tự trong ứng dụng là char, wchar_t, char16_t và char32_t.

Hãy xác định một số biến:

Char c="d"; wchar_t d="c";

Một biến kiểu char lấy một ký tự làm giá trị. dấu nháy đơn: char c="d" . Bạn cũng có thể chỉ định một số từ phạm vi được chỉ định ở trên trong danh sách: char c = 120 . Trong trường hợp này, giá trị của biến c sẽ là ký tự có mã 120 trong bảng ký tự ASCII.

Cần lưu ý rằng để xuất các ký tự wchar_t ra bảng điều khiển, bạn không nên sử dụng std::cout mà nên sử dụng luồng std::wcout:

#bao gồm int main() ( char a = "H"; wchar_t b = "e"; std::wcout<< a << b << "\n"; return 0; }

Trong trường hợp này, luồng std::wcout có thể hoạt động với cả char và wchar_t. Và luồng std::cout cho biến wchar_t sẽ xuất mã số thay vì ký tự.

Tiêu chuẩn C++11 đã thêm các loại char16_t và char32_t, được định hướng sử dụng Unicode. Tuy nhiên, các luồng để làm việc với các loại này vẫn chưa được triển khai ở cấp hệ điều hành. Do đó, nếu cần hiển thị giá trị của các biến thuộc các kiểu này ra console, bạn cần chuyển đổi các biến thành kiểu char hoặc wchar_t:

#bao gồm int main() ( char a = "H"; wchar_t b = "e"; char16_t c = "l"; char32_t d = "o"; std::cout<< a << (char)b << (char)c << (char)d << "\n"; return 0; }

Trong trường hợp này, khi xuất ra, các biến được bắt đầu bằng thao tác ép kiểu thành kiểu char - (char), do đó giá trị của các biến b, c và d được chuyển đổi thành kiểu char và có thể xuất ra thành bảng điều khiển bằng cách sử dụng luồng std::cout.

Kiểu số nguyên

Các kiểu số nguyên được biểu diễn bằng các loại sau: short, unsigned short, int, unsigned int, long, unsigned long, long long và unsigned long long:

Ngắn a = -10; ngắn không dấu b= 10; int c = -30; unsigned int d = 60; dài e = -170; dài không dấu f = 45; dài dài g = 89;

Các loại số dấu phẩy động

Các loại số dấu phẩy động và số phân số được biểu diễn bằng float, double và long double:

Thả a = -10,45; gấp đôi b = 0,00105; dài gấp đôi c = 30,890045;

Kích thước kiểu dữ liệu

Danh sách trên hiển thị cho mỗi loại kích thước mà nó chiếm trong bộ nhớ. Tuy nhiên, điều đáng chú ý là các nhà phát triển trình biên dịch có thể chọn giới hạn kích thước cho các loại một cách độc lập, dựa trên khả năng phần cứng của máy tính. Tiêu chuẩn chỉ đặt các giá trị tối thiểu cần có. Ví dụ: đối với loại int và short, giá trị tối thiểu là 16 bit, đối với loại dài - 32 bit, đối với loại dài double. Trong trường hợp này, kích thước của loại long không được nhỏ hơn kích thước của loại int và kích thước của loại int không được nhỏ hơn kích thước của loại short và kích thước của loại long double phải phải lớn hơn gấp đôi. Ví dụ: trình biên dịch g++ cho Windows sử dụng 12 byte cho các nhân đôi dài và trình biên dịch được tích hợp trong Visual Studio và cũng chạy trong Windows sử dụng 8 byte cho các nhân đôi dài. Nghĩa là, ngay cả trong cùng một nền tảng, các trình biên dịch khác nhau có thể tiếp cận kích thước của các loại dữ liệu nhất định một cách khác nhau. Nhưng nói chung, kích thước được chỉ ra ở trên khi mô tả loại dữ liệu sẽ được sử dụng.

Tuy nhiên, có những tình huống cần biết chính xác kích thước của một loại nhất định. Và để làm điều này, C++ có toán tử sizeof(), trả về kích thước của bộ nhớ tính bằng byte mà biến đó chiếm giữ:

#bao gồm int main() ( số kép dài = 2; std::cout<< "sizeof(number) =" << sizeof(number); return 0; }

Đầu ra của bàn điều khiển khi biên dịch bằng g ++:

sizeof(số) = 12

Đồng thời, khi xác định biến, điều quan trọng là phải hiểu rằng giá trị của biến không được vượt quá giới hạn được nêu cho loại của nó. Ví dụ:

Số ngắn không dấu = -65535;

Trình biên dịch G++ khi biên dịch chương trình với dòng này sẽ phát sinh lỗi cho biết giá trị -65535 không nằm trong phạm vi giá trị hợp lệ cho loại ngắn không dấu và sẽ bị cắt bớt.

Trong Visual Studio, quá trình biên dịch có thể tiến hành mà không có lỗi, nhưng biến số sẽ nhận giá trị 2 - kết quả của việc chuyển đổi số -65535 thành kiểu ngắn không dấu. Nghĩa là, một lần nữa, kết quả sẽ không chính xác như mong đợi. Giá trị của một biến chỉ là tập hợp các bit trong bộ nhớ được diễn giải theo một loại cụ thể. Và đối với các loại khác nhau, cùng một bộ bit có thể được hiểu khác nhau. Vì vậy, điều quan trọng là phải xem xét phạm vi giá trị cho một loại nhất định khi gán giá trị cho một biến.

công cụ xác định tự động

Đôi khi có thể khó xác định loại biểu thức. Và theo các tiêu chuẩn mới nhất, bạn có thể để trình biên dịch tự suy ra loại đối tượng. Và công cụ xác định tự động được sử dụng cho việc này. Hơn nữa, nếu chúng ta xác định một biến bằng bộ xác định tự động, biến này phải được khởi tạo với một số giá trị:

Số tự động = 5;

Dựa trên giá trị được gán, trình biên dịch sẽ suy ra loại biến. Các biến chưa được khởi tạo với bộ xác định tự động không được phép.