Char, Short, Int 및 Long 타입

char #

char 유형은 1바이트의 메모리(8비트)를 사용하며 이진 표기법 2^8=256 값으로 표현할 수 있습니다. char 유형에는 양의 값과 음의 값이 모두 포함될 수 있습니다. 값의 범주는 -128 부터 127 까지 입니다.

uchar #

uchar 정수 타입도 char 타입뿐만 아니라 1바이트의 메모리를 차지하지만 uchar는 이와 달리 양의 값에만 사용됩니다. 최소값은 0이고 최대값은 255입니다. uchar 유형의 이름에서 첫번째 문자 u는 unsigned의 약자입니다.

short #

short 유형의 크기는 2바이트(16비트)이므로 2와 같은 값 범위를 전력 16: 2^16 = 65 536으로 표시할 수 있습니다.short 유형은 부호화된 유형이며 양의 값과 음의 값을 모두 포함하므로 값의 범위는 -32 768에서 32 767 사이입니다.

ushort #

부호 없는 short 타입은 크기가 2바이트인 ushort 유형입니다. 최소값은 0, 최대값은 65 535 입니다.

int #

int 유형의 크기는 4바이트(32비트)입니다. 최소값은 -2 147 483 648, 최대값은 2 147 483 647 입니다.

uint #

부호 없는 정수 유형은 uint 입니다. 4바이트의 메모리가 소요되며 0부터 4 294 967 295 까지의 정수를 표현할 수 있습니다.

long #

long 타입의 크기는 8바이트 (64비트)입니다. 최소값은 -9 223 372 036 854 775 808, 최대값은 9 223 372 036 854 775 807 입니다.

ulong #

ulong 타입은 또한 8바이트를 차지하며 값을 0부터 18 446 744 073 709 551 615까지 저장할 수 있습니다.

예제:

char  ch=12;
short sh=-5000;
int   in=2445777;

부호 없는 정수 유형은 음수 값을 저장하도록 설계되지 않았기 때문에 음수 값을 설정하려고 하면 예기치 않은 결과가 발생할 수 있습니다. 이러한 간단한 스크립트는 무한 루프(loop)로 이어집니다:

//--- 무한 루프
void OnStart()
  {
   uchar  u_ch;
 
   for(char ch=-128;ch<128;ch++)
     {
      u_ch=ch;
      Print("ch = ",ch," u_ch = ",u_ch);
    }
  }

올바른 변수는:

//--- 올바른 변수
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;
    }
  }

결과:

   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
    ... 

예제:

//--- 부호가 없는 유형에는 음수 값을 저장할 수 없습니다
uchar  u_ch=-120;
ushort u_sh=-5000;
uint   u_in=-401280;

16진수: 숫자 0-9, 10-15의 a-f 또는 A-F 문자, 0x 또는 0X로 시작합니다.

예제:

0x0A0x120X120x2f0xA30Xa30X7C7

정수 변수의 경우 값을 B 접두사를 사용하여 이진 형식으로 설정할 수 있습니다. 예를 들어, 거래 세션의 작업 시간을 int 유형 변수로 인코딩하고 필요한 알고리즘에 따라 거래 세션에 대한 정보를 사용할 수 있습니다:

//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 함수                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 근무 시간에 대해 1을 설정하고 근무하지 않는 시간에 대해 0을 설정합니다
   int AsianSession   =B'111111111'// 아시아 세션 0:00 ~ 9:00
   int EuropeanSession=B'111111111000000000'// 유럽 세션 9:00 - 18:00
   int AmericanSession =B'111111110000000000000011'// 미국 세션 16:00 - 02:00
//--- 세션의 수치 값 구하기
   PrintFormat("아시아 세션 시간의 값은 =%d",AsianSession);
   PrintFormat("유럽 세션 시간의 값은 %d",EuropeanSession);
   PrintFormat("미국 세션 시간의 값은 %d",AmericanSession);
//--- 이제 세션의 작업 시간에 대한 문자열 표현을 표시하겠습니다
   Print("아시아 세션 ",GetHoursForSession(AsianSession));
   Print("유럽 세션 ",GetHoursForSession(EuropeanSession));
   Print("미국 세션 ",GetHoursForSession(AmericanSession));   
//---
  }
//+------------------------------------------------------------------+
//| 세션의 작업 시간을 문자열로 반환                   |
//+------------------------------------------------------------------+
string GetHoursForSession(int session)
  {
//--- 확인하려면, AND 비트 연산 및 1 비트 <<=1 의 좌측 시프트를 사용하십시오
//--- 가장 낮은 비트부터 검사를 시작합니다
   int bit=1;
   string out="working hours: ";
//--- 0에서 시작하여 최대 23까지 24비트를 모두 검사합니다.  
   for(int i=0;i<24;i++)
     {
      //--- 수의 비트 상태 수신
      bool workinghour=(session&bit)==bit;
      //--- 메시지에 시간 수를 추가
      if(workinghour )out=out+StringFormat("%d ",i); 
      //--- 왼쪽으로 한 비트씩 이동하여 다음 값 확인
      bit<<=1;
    }
//--- 결과 문자열
   return out;
  }

더 보기

타입캐스팅