새로운 MQL4 구문 - 페이지 3

 

변수 유형, int, uint, char, short ushort 등에 대해 질문이 있습니다. 새 컴파일러는 유형 변환으로 인한 데이터 손실 가능성에 대한 경고를 표시하므로 다음을 수행하는 것이 가장 좋습니다.

a) 변수의 요구사항에 가장 잘 맞는 것을 사용하거나,

b) 유형 간 변환을 피하고 모든 것에 int를 사용하십시오. (글쎄, 부동 소수점이 필요하지 않은 모든 것)

 
SDC :

변수 유형, int, uint, char, short ushort 등에 대해 질문이 있습니다.

a) 변수의 요구 사항에 가장 잘 맞는 것을 사용하거나

b) 유형 간 변환을 피하고 모든 것에 int를 사용하십시오. (글쎄, 부동 소수점이 필요하지 않은 모든 것)

unsigned long int가 필요하면 자르지 않습니다. . . 올바른 유형과 명시적 유형 변환을 사용하십시오. IMO
 

명시적 유형 변환이란 다른 유형 간의 계산 전에 변환을 수행하는 것을 의미합니까?

 
RaptorUK :
unsigned long int가 필요하면 자르지 않습니다. . . 올바른 유형과 명시적 유형 변환을 사용하십시오. IMO

동의하다.
 
SDC :

명시적 유형 변환이란 다른 유형 간의 계산 전에 변환을 수행하는 것을 의미합니까?

여기를 참조하십시오 : https://www.mql5.com/en/docs/basis/types/casting
 

좋은글 감사합니다 gevoyageur 퇴근하면 제대로 읽어보겠습니다.

 
SDC :

명시적 유형 변환이란 다른 유형 간의 계산 전에 변환을 수행하는 것을 의미합니까?

아니요, 내 말은 ulong을 이와 같이 int로 변환할 수 있다는 뜻입니다. . .

 ulong VariableUlong;

int VariableInt;

VariableUlong = 100 ;

VariableInt = ( int ) VariableUlong;   // explicit typecasting . . .   
 

네, 그게 당신이 의미하는 것이라고 생각했습니다.

내가 ulong에 대해 정말로 묻지 않았다는 것을 제외하고. 32비트 정수로 수용할 수 없는 큰 값으로 작업해야 하는 경우는 거의 없습니다. 나는 64 비트 정수가 lol을 담을 수있는 숫자를 말하는 방법조차 모릅니다 ...

나는 아마도 더 구체적이어야 했을 것입니다. 오늘 아침에 내 질문을 적절하게 작성할 시간이 없었지만 지금은 집에 있습니다.

이전 mql4에서는 모든 것에 정수를 사용했습니다. 우리는 for(int i=0; i<100; i++)라고 쓸 것입니다. 음수 값이 필요하지 않으며 uchar를 사용할 수 있도록 100보다 큰 값이 필요하지 않습니다. 그것이 우리가 해야 할 일이라는 뜻입니까?

다른 프로그래머 코드를 보면 많은 사람들이 32비트 정수 유형을 전반적으로 사용하는 것 같습니다. 타당한 이유가 있습니까? 내가 아직 알아내지 못한 사실을 그들은 무엇을 압니까? 프로그램 전체에서 가장 작은 풋프린트 변수 유형을 사용하면 파일 크기가 약간 작은 것 외에 다른 이유 없이 유형 캐스팅 문제의 골칫거리가 발생합니까? 아니면 많은 RAM을 절약합니까? 한 유형의 값이 다른 유형에 의해 수용될 수 있는 한 그렇게 하는 것이 안전하다고 가정하는 것이 안전합니까? 다른 유형 간의 유형 캐스팅은 동일한 유형을 사용하는 것보다 훨씬 더 많은 CPU를 사용합니까?

업데이트: 나는 이것을 찾고 있었습니다. 나는 stackoverflow.com에서 비슷한 질문에 대한 이 답변을 읽었습니다.

"성능 면에서 int는 거의 모든 경우에 더 빠릅니다. CPU는 32비트 값으로 효율적으로 작동하도록 설계되었습니다.

더 짧은 값은 다루기가 복잡합니다. 예를 들어 단일 바이트를 읽으려면 CPU가 이를 포함하는 32비트 블록을 읽은 다음 상위 24비트를 마스킹해야 합니다.

바이트를 쓰려면 대상 32비트 블록을 읽고 하위 8비트를 원하는 바이트 값으로 덮어쓴 다음 전체 32비트 블록을 다시 써야 합니다.

물론 공간적으로는 더 작은 데이터 유형을 사용하여 몇 바이트를 절약할 수 있습니다. 따라서 수백만 개의 행이 있는 테이블을 작성하는 경우 더 짧은 데이터 유형을 고려할 가치가 있습니다. (그리고 데이터베이스에서 더 작은 데이터 유형을 사용해야 하는 좋은 이유일 수도 있습니다.)

그리고 정확성 측면에서 int는 쉽게 오버플로되지 않습니다. 값이 바이트 안에 들어갈 것이라고 생각하고 미래의 어느 시점에서 코드에 무해해 보이는 변경이 더 큰 값이 코드에 저장된다는 것을 의미한다면 어떻게 될까요?

이것이 int가 모든 정수 데이터에 대한 기본 데이터 유형이어야 하는 이유 중 일부입니다. 실제로 머신 바이트를 저장하려는 경우에만 byte를 사용하십시오. 실제로 16비트 정수 값을 지정하는 파일 형식이나 프로토콜 또는 이와 유사한 것을 처리하는 경우에만 short를 사용하십시오. 일반적으로 정수를 다루는 경우 정수로 만드십시오."

 
SDC :

네, 그게 당신이 의미하는 것이라고 생각했습니다.

내가 ulong에 대해 정말로 묻지 않았다는 것을 제외하고. 32비트 정수로 수용할 수 없는 큰 값으로 작업해야 하는 경우는 거의 없습니다. 나는 64 비트 정수가 lol을 담을 수있는 숫자를 말하는 방법조차 모릅니다 ...

나는 아마도 더 구체적이어야 했을 것입니다. 오늘 아침에 내 질문을 적절하게 작성할 시간이 없었지만 지금은 집에 있습니다.

이전 mql4에서는 모든 것에 정수를 사용했습니다. 우리는 for(int i=0; i<100; i++)라고 쓸 것입니다. 음수 값이 필요하지 않으며 uchar를 사용할 수 있도록 100보다 큰 값이 필요하지 않습니다. 그것이 우리가 해야 할 일이라는 뜻입니까?

uchar - 부호 없는 문자, 이것을 루프에 사용하는 이유는 무엇입니까? 그것은 나에게 의미가 없습니다. . . 정수를 사용합니다. 당신은 ulongs와 함께 일하게 될 것입니다. 그것이 새로운 datetime 입니다. . . 그리고 미래 에 그것에 대해 생각 하지 않고 typecast 하면 경고 를 받게 됩니다 . . . 경고를 처리하거나 무시하십시오. 그래도 좋은 것만 바라지 말고 지금 하는 대로 하고 배우고 이해해

stackoverflow 에서 게시한 내용은 나에게 의미가 있습니다. 좋은 조언이라고 생각합니다.

 
SDC : 다른 유형 간의 유형 변환은 동일한 유형을 사용하는 것보다 훨씬 더 많은 CPU를 사용합니까?

크기가 다르면 CPU를 더 많이 사용하는 것이 아니라 더 많이 사용합니다. 구조에서 문자를 수정할 때 언급된 32비트 페치, 격리, 작동, 배치, 쓰기와 같은 다른 명령. 0.5를 곱하면 2.0으로 나누는 것보다 약간 적은 CPU를 사용하는 것과 같습니다.

어레이 요소 당 16비트를 저장하는 것은 GB 시스템에서 의미가 없습니다. 응용 프로그램, 데이터베이스, GUI(vt100)를 8KB(원문 그대로)로 구현할 때 그렇게 했습니다. 128비트 플랫폼이 일반화될 때까지 감지합니다.

서명된 것과 서명되지 않은 것은 차이가 없습니다. 단지 할당일 뿐이며 비트는 변경되지 않습니다. 차이점은 변수를 사용하는 코드입니다. 예를 들어 A[index]는 Address(a) + index * sizeof(a[0])를 수행합니다. 여기서 더하기는 부호 있는 또는 부호 없는 덧셈입니다.

코딩의 명확성을 위해 A[-1]이 의미가 없지만 카운트다운이 문제가 되기 때문에 배열을 인덱싱하는 데 uint를 사용합니다. FOR(uint iA=n; iA >= 0; iA--){} iA>=0 is 항상 사실입니다.

다른 이유로 반드시 필요한 경우가 아니면 int(또는 uint)를 사용하십시오.
사유: