c++ || 비트연산 - C ++에서 "->"연산자는 무엇입니까?



10 Answers

또는 완전히 다른 무언가를 위해 ... x slide to 0

while (x --\
            \
             \
              \
               > 0)
     printf("%d ", x);

그렇게 수학적은 아니지만 ... 모든 그림이 천 단어를 칠합니다 ...

진수 단항연산자 not

comp.lang.c++.moderated 에서 숨겨진 기능 및 C ++ / STL의 숨겨진 기능을 읽은 후 Visual Studio 2008과 G ++ 4.4 모두에서 컴파일되고 작동되는 것에 대해 매우 놀랐습니다.

코드는 다음과 같습니다.

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}

나는 이것이 GCC에서도 잘 작동하기 때문에 이것이 C라고 가정 할 것이다. 표준에서 정의 된 부분은 어디에서 비롯 되었습니까?




그것은

while (x-- > 0)

x-- (후 감소)는 x = x-1 과 동일하므로 코드는 다음으로 변환됩니다.

while(x > 0) {
    x = x-1;
    // logic
}



#include <stdio.h>
int main(void){
     int x = 10;

     while( x-- > 0 ){ // x goes to 0

       printf("%d ", x);
     }

     return 0;
}

공간 만 있으면 재미있는 것처럼 보입니다. -- 감소하고 비교합니다.




while( x-- > 0 )

그게 어떻게 해석되는거야.




내가 읽은 한 권의 책 (나는 어떤 책을 정확하게 기억하지 못한다.) : 컴파일러 는 왼쪽 오른쪽 규칙을 사용하여 가장 큰 토큰대한 식을 구문 분석하려고 시도했다 .

이 경우 표현식은 다음과 같습니다.

x-->0

가장 큰 토큰을 파싱합니다.

token 1: x
token 2: --
token 3: >
token 4: 0
conclude: x-- > 0

이 표현식에도 같은 규칙이 적용됩니다.

a-----b

구문 분석 후 :

token 1: a
token 2: --
token 3: --
token 4: -
token 5: b
conclude: (a--)-- - b

이것이 복잡한 표현을 이해하는 데 도움이되기를 바랍니다 ^^




어쨌든, 이제 우리는 "간다"연산자를 사용합니다. "-->" 는 방향으로 기억하기 쉽고 "x가 0으로가는 동안"은 의미 직설법입니다.

또한 일부 플랫폼에서는 "for (x = 10; x > 0; x --)" 보다 약간 더 효율적입니다.




이 코드를 실행할 때 내 컴파일러가 9876543210을 출력합니다.

#include <iostream>
int main()
{
    int x = 10;

    while( x --> 0 ) // x goes to 0
    {
        std::cout << x;
    }
}

예상대로. while( x > 0) 은 실제로 while( x > 0) 합니다. x-- 게시물은 x 감소시킵니다.

while( x > 0 ) 
{
    x--;
    std::cout << x;
}

같은 것을 쓰는 다른 방법입니다.

하지만 원본이 "x가 0으로가는 동안"과 같이 보이는 것이 좋습니다.




--감소 연산자이고 >더 큰 연산자입니다.

두 연산자는 --> 와 같은 단일 연산자로 적용됩니다.




사실, x 는 post-decrementing이고 그 조건은 검사되고 있습니다. 그것은 아닙니다 --> , (x --> (x--) > 0

참고 : x 값은 조건을 확인한 후에 사후 감소하기 때문에 변경됩니다. 유사한 경우도 발생할 수 있습니다. 예를 들면 다음과 같습니다.

-->    x-->0
++>    x++>0
-->=   x-->=0
++>=   x++>=0



왜 모든 합병증?

원래 질문에 대한 간단한 대답은 다음과 같습니다.

#include <stdio.h>
int main()
{
    int x = 10;
    while (x > 0) 
    {
        printf("%d ", x);
        x = x-1;
    }
}

똑같은 일을한다. 당신이 이렇게해야한다고 말하는 것은 아니지만, 똑같은 일을하고 한 게시물에 질문에 대답했을 것입니다.

x-- 는 위의 경우에 단지 축약 형이며, > 는 정상적인보다 큰 operator 입니다. 아니 큰 수수께끼!

요즘에는 복잡한 일을 너무 많이하는 사람들이 있습니다.)






Related