IT story

Java에서 사후 증가 (i ++) 및 사전 증가 (++ i) 연산자는 어떻게 작동합니까?

hot-time 2020. 9. 12. 11:30
반응형

Java에서 사후 증가 (i ++) 및 사전 증가 (++ i) 연산자는 어떻게 작동합니까?


이 Java 코드의 출력을 설명해 주시겠습니까?

int a=5,i;

i=++a + ++a + a++;
i=a++ + ++a + ++a;
a=++a + ++a + a++;

System.out.println(a);
System.out.println(i);

두 경우 모두 출력은 20입니다.


도움이 되나요?

a = 5;
i=++a + ++a + a++; =>
i=6 + 7 + 7; (a=8)

a = 5;
i=a++ + ++a + ++a; =>
i=5 + 7 + 8; (a=8)

요점은 ++a증가시키고 즉시 반환한다는 것입니다.

a++ 또한 값을 증가 시키지만 (백그라운드에서) 변수의 변경되지 않은 값을 반환합니다. 나중에 실행되는 것처럼 보입니다.


++a증분하고 변수를 사용합니다.
a++변수를 사용한 다음 증분합니다.

당신이 가지고 있다면

a = 1;

그리고 당신은

System.out.println(a++); //You will see 1

//Now a is 2

System.out.println(++a); //You will see 3

codaddict는 특정 스 니펫을 설명 합니다.


두 경우 모두 먼저 값을 계산하지만 사후 증분에서는 이전 값을 유지하고 계산 후 반환합니다.

++ a

  1. a = a + 1;
  2. 반환 a;

a ++

  1. 온도 = a;
  2. a = a + 1;
  3. 반환 온도;

i = ++a + ++a + a++;

이다

i = 6 + 7 + 7

Working : a에서 6까지 증가 (현재 값 6) + a에서 7까지 증가 (현재 값 7). 합계는 이제 13입니다. a (= 7)의 현재 값에 더한 다음 a를 8로 증가시킵니다. 합계는 20이고 할당 완료 후 a의 값은 8입니다.

i = a++ + ++a + ++a;

이다

i = 5 + 7 + 8

Working : a의 시작 값은 5입니다. 덧셈에 사용하고 6 (현재 값 6)으로 증가시킵니다. +의 다른 피연산자를 얻으려면 a를 현재 값 6에서 7로 증가시킵니다. 합계는 12이고 a의 현재 값은 7입니다. 다음으로 a를 7에서 8까지 증가시키고 (현재 값 = 8) 이전 합계 12에 더하여 20을 얻습니다.


++aa평가되기 전에 증가 합니다. a++평가 a하고 증분합니다.

주어진 표현과 관련 :

i = ((++a) + (++a) + (a++)) == ((6) + (7) + (7)); // a is 8 at the end
i = ((a++) + (++a) + (++a)) == ((5) + (7) + (8)); // a is 8 at the end

The parenteses I used above are implicitly used by Java. If you look at the terms this way you can easily see, that they are both the same as they are commutative.


In the above example

int a = 5,i;

i=++a + ++a + a++;        //Ans: i = 6 + 7 + 7 = 20 then a = 8 

i=a++ + ++a + ++a;        //Ans: i = 8 + 10 + 11 = 29 then a = 11

a=++a + ++a + a++;        //Ans: a = 12 + 13 + 13 = 38

System.out.println(a);    //Ans: a = 38

System.out.println(i);    //Ans: i = 29

++a is prefix increment operator:

  • the result is calculated and stored first,
  • then the variable is used.

a++ is postfix increment operator:

  • the variable is used first,
  • then the result is calculated and stored.

Once you remember the rules, EZ for ya to calculate everything!


I believe however if you combine all of your statements and run it in Java 8.1 you will get a different answer, at least that's what my experience says.

The code will work like this:

int a=5,i;

i=++a + ++a + a++;            /*a = 5;
                                i=++a + ++a + a++; =>
                                i=6 + 7 + 7; (a=8); i=20;*/

i=a++ + ++a + ++a;           /*a = 5;
                                i=a++ + ++a + ++a; =>
                                i=8 + 10 + 11; (a=11); i=29;*/

a=++a + ++a + a++;            /*a=5;
                                a=++a + ++a + a++; =>
                                a=12 + 13 + 13;  a=38;*/

System.out.println(a);        //output: 38
System.out.println(i);         //output: 29

Presuming that you meant

int a=5; int i;

i=++a + ++a + a++;

System.out.println(i);

a=5;

i=a++ + ++a + ++a;

System.out.println(i);

a=5;

a=++a + ++a + a++;

System.out.println(a);

This evaluates to:

i = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)

so i is 6 + 7 + 7 = 20 and so 20 is printed.

i = (5, a is now 6) + (7, a is now 7) + (8, a is now 8)

so i is 5 + 7 + 8 = 20 and so 20 is printed again.

a = (6, a is now 6) + (7, a is now 7) + (7, a is now 8)

and after all of the right hand side is evaluated (including setting a to 8) THEN a is set to 6 + 7 + 7 = 20 and so 20 is printed a final time.


when a is 5, then a++ gives a 5 to the expression and increments a afterwards, while ++a increments a before passing the number to the expression (which gives a 6 to the expression in this case).

So you calculate

i = 6 + 7 + 7
i = 5 + 7 + 8

Pre-increment means that the variable is incremented BEFORE it's evaluated in the expression. Post-increment means that the variable is incremented AFTER it has been evaluated for use in the expression.

Therefore, look carefully and you'll see that all three assignments are arithmetically equivalent.


pre-increment and post increment are equivalent if not in an expression

int j =0;
int r=0         
for(int v = 0; v<10; ++v) { 
          ++r;
          j++;
          System.out.println(j+" "+r);
  }  
 1 1  
 2 2  
 3 3       
 4 4
 5 5
 6 6
 7 7
 8 8
 9 9
10 10

a=5; i=++a + ++a + a++;

is

i = 7 + 6 + 7

Working: pre/post increment has "right to left" Associativity , and pre has precedence over post , so first of all pre increment will be solve as (++a + ++a) => 7 + 6 . then a=7 is provided to post increment => 7 + 6 + 7 =20 and a =8.

a=5; i=a++ + ++a + ++a;

is

i=7 + 7 + 6

Working: pre/post increment has "right to left" Associativity , and pre has precedence over post , so first of all pre increment will be solve as (++a + ++a) => 7 + 6.then a=7 is provided to post increment => 7 + 7 + 6 =20 and a =8.


I believe you are executing all these statements differently
executing together will result => 38 ,29

int a=5,i;
i=++a + ++a + a++;
//this means i= 6+7+7=20 and when this result is stored in i,
//then last *a* will be incremented <br>
i=a++ + ++a + ++a;
//this means i= 5+7+8=20 (this could be complicated, 
//but its working like this),<br>
a=++a + ++a + a++;
//as a is 6+7+7=20 (this is incremented like this)

참고URL : https://stackoverflow.com/questions/2371118/how-do-the-post-increment-i-and-pre-increment-i-operators-work-in-java

반응형