Kiểu Char, Short, Int and Long
char
- Chiếm 1 byte bộ nhớ (8 bit), cho phép biểu diễn
2^8=256
giá trị theo ký hiệu nhị phân. - Có thể chứa cả giá trị dương và giá trị âm.
- Phạm vi giá trị từ
-128
đến127
.
uchar
- Chiếm 1 byte bộ nhớ như kiểu char
- Chỉ chứa các giá trị dương
- Giá trị tối thiểu là
0
, tối đa là255
. - Chữ cái u trong tên
uchar
là chữ viết tắt củaunsigned
.
short
- Kích thước là 2 byte (16 bit), cho phép biểu thị phạm vi giá trị bằng 2 mũ 16:
2^16 = 65 536
. - Vì kiểu short là kiểu có dấu (signed) và chứa cả giá trị dương và giá trị âm nên phạm vi giá trị nằm trong khoảng từ
-32 768
đến32 767
.
ushort
- Kiểu unsigned short là kiểu ushort , cũng có kích thước là 2 byte.
- Giá trị nhỏ nhất là 0, giá trị lớn nhất là
65 535
.
int
- Kích thước là 4 byte (32 bit).
- Giá trị tối thiểu là
-2 147 483 648
- Giá trị tối đa là
2 147 483 647
.
uint
- Chiếm 4 byte bộ nhớ
- Cho phép biểu diễn các số nguyên từ 0 đến
4 294 967 295
.
long
- Kích thước là 8 byte (64 bit).
- Giá trị nhỏ nhất là
-9 223 372 036 854 775 808
- Giá trị lớn nhất là
9 223 372 036 854 775 807
.
ulong
- Chiếm 8 byte
- Lưu trữ các giá trị từ 0 đến
18 446 744 073 709 551 615
.
Ví dụ
cpp
char ch=12;
short sh=-5000;
int in=2445777;
Vì các kiểu số nguyên không dấu (unsigned) không được thiết kế để lưu trữ các giá trị âm nên việc cố gắng đặt giá trị âm có thể dẫn đến những hậu quả không mong muốn. Một đoạn script đơn giản như vậy sẽ dẫn đến một vòng lặp vô hạn:
cpp
//--- Lặp vô hạn
void OnStart()
{
uchar u_ch;
for(char ch=-128;ch<128;ch++)
{
u_ch=ch;
Print("ch = ",ch," u_ch = ",u_ch);
}
}
Đúng phải là:
cpp
//--- Biến thể đúng
void OnStart()
{
uchar u_ch;
for(char ch=-128;ch<=127;ch++)
{
u_ch=ch;
Print("ch = ",ch," u_ch = ",u_ch);
if(ch==127) break; // Cần break để vòng lặp dừng lại
}
}
Kết quả là:
sh
ch= -128 u_ch= 128
ch= -127 u_ch= 129
ch= -126 u_ch= 130
ch= -125 u_ch= 131
ch= -124 u_ch= 132
ch= -123 u_ch= 133
ch= -122 u_ch= 134
ch= -121 u_ch= 135
ch= -120 u_ch= 136
ch= -119 u_ch= 137
ch= -118 u_ch= 138
ch= -117 u_ch= 139
ch= -116 u_ch= 140
ch= -115 u_ch= 141
ch= -114 u_ch= 142
ch= -113 u_ch= 143
ch= -112 u_ch= 144
ch= -111 u_ch= 145
...
VD:
cpp
//--- Các giá trị âm không thể được lưu trữ trong các kiểu unsigned
uchar u_ch=-120;
ushort u_sh=-5000;
uint u_in=-401280;
Hệ thập lục phân: các số
0-9
, các chữ cáia-f
hoặcA-F
cho các giá trị10-15
; bắt đầu bằng 0x hoặc 0X.
sh
0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7
Đối với các biến số nguyên, các giá trị có thể được đặt ở dạng nhị phân bằng tiền tố B. Ví dụ: bạn có thể mã hóa giờ làm việc của phiên giao dịch thành biến kiểu int và sử dụng thông tin về chúng theo thuật toán được yêu cầu:
cpp
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- đặt 1 cho giờ làm việc và 0 cho giờ không làm việc
int AsianSession =B'111111111'; // Phiên Á từ 0:00 đến 9:00
int EuropeanSession=B'111111111000000000'; // Phiên Âu 9:00 - 18:00
int AmericanSession =B'111111110000000000000011'; // Phiên Mỹ từ 16:00 - 02:00
//--- lấy ra các giá trị số của các phiên
PrintFormat("Asian session hours as value =%d",AsianSession);
PrintFormat("European session hours as value is %d",EuropeanSession);
PrintFormat("American session hours as value is %d",AmericanSession);
//--- hiển thị chuỗi trình bày về giờ làm việc của các phiên
Print("Asian session ",GetHoursForSession(AsianSession));
Print("European session ",GetHoursForSession(EuropeanSession));
Print("American session ",GetHoursForSession(AmericanSession));
//---
}
//+------------------------------------------------------------------+
//| trả về giờ làm việc của phiên dưới dạng một chuỗi |
//+------------------------------------------------------------------+
string GetHoursForSession(int session)
{
//--- để để kiểm tra, sử dụng toán tử AND bit và dịch chuyển trái theo 1 bit <<=1
//--- bắt đầu kiểm tra từ bit thấp nhất
int bit=1;
string out="working hours: ";
//--- kiểm tra tất cả 24 bit bắt đầu từ số 0 và lên đến 23 toàn bộ
for(int i=0;i<24;i++)
{
//--- nhận được trạng thái bit bằng số
bool workinghour=(session&bit)==bit;
//--- thêm số giờ vào tin nhắn
if(workinghour )out=out+StringFormat("%d ",i);
//--- dịch sang trái một bit để kiểm tra giá trị của bit tiếp theo
bit<<=1;
}
//--- trả về chuỗi
return out;
}