2016-12-25 6 views
11

간단한 콘솔 응용 프로그램에서 POST 증가 연산자를 테스트하는 동안 완전한 개념을 이해하지 못한다는 사실을 깨달았습니다. 나에게 이상하게 보입니다.C# 게시 증분

int i = 0; 
bool b = i++ == i; 
Console.WriteLine(b); 

출력이 false입니다. 나는 그것이 사실 일 것이라고 예상했다. AFAIK, 2 라인에서, 포스트 증가 때문에, 컴파일러는 비교를 수행하고 하나를 증가시킨 후 b를 true로 지정합니다. 그러나 분명히 나는 ​​틀렸다. 는 그 후 나는 코드처럼 수정 :

int i = 0; 
bool b = i == i++; 
Console.WriteLine(b); 

이 시간 출력은 사실이었다. 첫 번째 샘플에서 무엇이 변경 되었습니까?

답변

9

예에서 의 값이 처음에는 0 인 것으로 가정합니다.

i++ == ii (0)를 읽는다 i를 증가 (1) 다시 i을 판독하고, 두 값을 비교한다 : 0 == 1.

i == i++i (0)를 다시 판독한다 (0)를 i를 판독 i를 증가하고, 두 값을 비교한다 : 0 == 0.

이전 값을 읽은 후 즉시이 증가합니다.

1

코드의 첫 번째 조각에 응답 : 여기

, bool b = i++ == i;0 == 1이며 i++ 알고 후 증가가 너무 i 때문에 이것이는 i++에서 0 남아 있지만, 그 부분 후 실행을 완료하고이되고 있습니다 오른쪽에 비해 i인데,이 시간은 이전 게시물 증가로 인해 값이 1로 변경됩니다. 따라서 수행 할 때 False이 표시되는 이유는 다음과 같습니다. bool b = i++ == i;.

마찬가지로 @hvd는 다음과 같습니다. 이전 값인을 읽은 후 바로 증가합니다.

+0

'bool b = i == i ++; 즉 0 == 0이 참이고 증가가 발생합니다. 먼저 값을 비교하고 나서 i를 증가시킵니다. 그러나 처음에는 'bool b = i ++ == i;'와 같은 다른 방법으로 발생합니다. 즉 0 == 1 먼저 0을 읽은 다음 i를 증가시킨 다음 그 값과 비교합니다 시간 i는 1로 증가하기 때문에 그가 거짓으로 표시됩니다. – Aamerallous

+0

맞습니다. 코드의 두 번째 스 니펫은 첫 번째 부분 뒤에있는 개념을 이해하면 이해할 수 있습니다. 대부분의 프로그래밍 언어에서와 동일합니다. 기본적인 기본 개념입니다. – Inconnu

1

접미사와 평등 연산자의 평가 순서는 왼쪽에서 오른쪽이므로 코드 주석에서 설명한대로 동작합니다.

int i = 0; 
bool b = i++ == i; 
// 1.) i++ returns old value i.e. 0 
// 2.) but after that it increments and becomes 1 
// 3.) hence, bool b = 0 == 1; --> evaluates to false 
Console.WriteLine(b); // prints false 

int i = 0; 
bool b = i == i++; 
// 1.) i returns old value i.e. 0 
// 2.) i++ returns old value i.e. 0, as this is the end of the statement after that it would increment 
// 3.) hence, bool b = 0 == 0; --> evaluates to true 
Console.WriteLine(b); // prints true