MQL5의 OOP에 대한 질문 - 페이지 91

 
Dmitry Fedoseev :

왜 갑자기 작동하지 않습니까? 세 개의 열거, 10보다 큰 것은 없습니다. 고등학교 2학년 산수.

열거형 3개 + int 2개, 4바이트 필요 = int

+1000 -... +1000 , pips 내에서 int가 필요합니다. 2^10입니다.

int - 여전히 생각할 수 있습니다. 1 pip의 단계는 중요하지 않습니다. 2.5-...9 pp에서 가능합니다. 즉, 이산성은 그다지 중요하지 않습니다.

 
Igor Makanu :

3개의 열거형과 2개의 int, 4바이트에 필요

+1000 -... +1000 , pips 내에서 int가 필요합니다. 2^10입니다.

int - 여전히 생각할 수 있습니다. 1 pip의 단계는 중요하지 않습니다. 2.5-...9 pp에서 가능합니다. 즉, 이산성은 그다지 중요하지 않습니다.

충분한 공간 이상입니다. INT_MAX=2147483647 .

당신은 여전히 어리석고 직접적으로 할 수 없습니다 - 수십, 그러나 경제적으로 연속적으로 - 8 * 8 * 4. 당신은 생각하면됩니다)) 그러나 필요가 없습니다. 모든 것이 적합합니다.

그리고 확인하기 위해 - 사이클을 INT_MAX로 휘젓지 않는 이유 - 제철 기계는 결과 자체가 포함된 파일을 보지 않고 확인합니다.

 
Dmitry Fedoseev :

충분한 공간 이상입니다. INT_MAX=2147483647 .

당신은 여전히 어리석고 직접적으로 할 수 없습니다 - 수십, 그러나 경제적으로 연속적으로 - 8 * 8 * 4. 당신은 생각하면됩니다)) 그러나 필요가 없습니다. 모든 것이 적합합니다.

그리고 확인하기 위해 - 사이클을 INT_MAX로 휘젓지 않는 이유 - 제철 기계는 결과 자체가 포함된 파일을 보지 않고 확인합니다.

상관없어요.. 평가를 위해서는 코드가 필요하고, 어떻게 변환하느냐보다 검증기술이 더 중요합니다

 
Igor Makanu :

상관없어요.. 평가를 위해서는 코드가 필요하고, 어떻게 변환하느냐보다 검증기술이 더 중요합니다

비트별로 출력물, 응? 숫자를 비트 단위 값이 있는 문자열로 변환하는 것과 같은 것입니다. 하나는 정수용이고 다른 하나는 점 및 확인용입니다. 이것은 단지 디버깅을 위한 것입니다.

 
Alexandr Andreev :

비트별로 출력물, 응? 숫자를 비트 단위 값이 있는 문자열로 변환하는 것과 같은 것입니다. 하나는 정수용이고 다른 하나는 점 및 확인용입니다. 이것은 단지 디버깅을 위한 것입니다.

예, 이것은 모두 명확하지만 확인을 자동화하는 방법은 무엇입니까?

문제는 내 예가 아니라 조각으로 포장해야 하는 다른 데이터 3 int 다른 데이터에서 각 패키지를 검색하지 않고 수표에 많은 시간을 할애하는 것입니다.


추신 : 아이디어는 밝지 만 비트 값은 아니지만 16 진수 - printf() 또는 stringformat()에서 얻을 수 있습니다.

 
Igor Makanu :

예, 이것은 모두 명확하지만 확인을 자동화하는 방법은 무엇입니까?

문제는 내 예가 아니라 조각으로 포장해야 하는 다른 데이터 3 int 다른 데이터에서 각 패키지를 검색하지 않고 수표에 많은 시간을 할애하는 것입니다.


추신 : 아이디어는 밝지 만 비트 값은 아니지만 16 진수 - printf() 또는 stringformat()에서 얻을 수 있습니다.

)) 무엇이 필요한지 이해할 수 없다

   v = (V)(data & 0x3 );
   d = (D)((data >> 2 ) & 0x7 );
   t = (T)((data >> 5 ) & 0x7 );
   uint tmp = ((data >> 8 ) & 0xFFF );
   param2 = (tmp & 0x800 ) == 0x800 ? -( int )(tmp & 0x7FF ) : ( int )(tmp & 0x7FF );
   tmp = data >> 20 ;
   param1 = (tmp & 0x800 ) == 0x800 ? -( int )(tmp & 0x7FF ) : ( int )(tmp & 0x7FF );

오프셋 또는 무엇을 자동화하고 싶습니까?

수표는 무엇입니까?

예, 우리는 항상 소스와 변환된 내용을 확인하여 제어할 수 있습니다.

 
Igor Makanu :

상관없어요.. 평가를 위해서는 코드가 필요하고, 어떻게 변환하느냐보다 검증기술이 더 중요합니다

변환 기술이 명확하고 이해할 수 있다면 검증이 특별히 필요하지 않습니다.

 
...
   static int        sign;
   static int        _sign;
   static int        mean;
public:
...
   int               Get() const;
   static void       Print(int val);
private:
   int               GetInt12(int val) const {return ((val&sign)>>20)|(val&mean);}
   static int        GetInt(int val) {return (val&_sign)<<20|(val&mean);}
  };
...
//------------------------------------------------------------------------
int CSetting::Get() const{
   return t<<29|d<<26|v<<24|GetInt12(param1)<<12|GetInt12(param2);
}
//------------------------------------------------------------------------
void CSetting::Print(int val){
   PrintFormat("%s, %s, %s, %i, %i",EnumToString(T(val>>29)),EnumToString(D(val>>26)),EnumToString(V(val>>24)),GetInt(val>>12),GetInt(val));
}
int CSetting::sign=1<<31;
int CSetting::_sign=1<<11;
int CSetting::mean=0xFFFFFFFF>>21;
void OnStart(void)
  {
   CSetting test(Input_p1,Input_p2,Input_T,Input_D,Input_V);
   int res=test.Get();
   Print ("int=",res);
   CSetting::Print(res);
 }
 
Vladimir Simakov :

글쎄, 나에게 더 많은 변수가 있을 것이 분명하므로 이를 위해서는 구조의 바이트 단위 복사를 사용하는 것이 좋습니다. 베스트)

 
void OnStart ()
  {

   int a= 9 ;
   int b= 8 ;
   int c= 7 ;
   int d= 12345 ;

   int v=pack(a,b,c,d);
   
   int a2,b2,c2,d2;
   unpack(v,a2,b2,c2,d2);
   
   Alert (a2, " " ,b2, " " ,c2, " " ,d2);

}

void unpack( int val, int & a, int & b, int & c, int & d){
   d=val/ 1000 ;
   val%= 1000 ;
   c=val/ 100 ;
   val%= 100 ;   
   b=val/ 10 ;
   a=val% 10 ;
}

int pack( int a, int b, int c, int d){
   return (a+b* 10 +c* 100 +d* 1000 );
}

싸고 명랑하다