C의 && || 연산

C & C++ 관련 : 2008. 4. 17. 00:45
Tag
반응형



z=   (y=x)||(++x);     101
z=   (y=x)||(x++);     100
z=   (x++)||(y=x);     111
z=   (++x)||(y=x);     101 *

1번 || 2번
이렇게 있다면 1번이 먼저 실행된다고 가정하면 위에 세 경우는 설명이 되는데 마지막것은 111 이 나와야 될꺼 같은데 안나오네요

왜 이런걸까요?

그리고
z=   (++x)&&(y=x);   111
z=   (x++)&&(y=x);   100
z=   (y=x)&&(x++);   000*
z=   (y=x)&&(++x);   000*

* 붙은 이런 경우 에는 앞에가 0 이라 스킵하는것 같아서

x와 z에 volatile로 지정해주었는데도 마찬가지더군요

설명좀 부탁드립니다.





카메란  [04/17 00:02]  ::
확실하지는 않지만..
아마 첫번 째 별표의 경우
(++x) 를 실행하면 1이 나오기 때문에 || 의 성격상 아마 뒤의 식(y=x) 는 무시해버려서
y의 기본 값인 0 이 찍히는 것 같구요.


두번째, 세번째의 경우

제가 알기로는 volatile의 경우
변수 자체의 쓰임새가 컴파일러가 판단했을 때, 필요 없다고 생각했을 때,
변수 자체를 무시하는데 이걸 무시 하지 말라고 할 때 사용하는걸로 알고 있는데

2번 째, 3번째의 경우 이거랑은 별 관련이 없는 것 같고
&& 기호 뒤에 것을 스킵하는 것은
&& 기호를 처리 하는 특성상 그런 것 같습니다.
 
today  [04/17 00:46]  ::
카메란님이 말씀하신대로입니다. C언어에서 ||나 &&와 같은 논리 연산을 사용할경우
||의 경우 앞의 식이 참일 경우 뒤의 식은 볼필요도 없이 참이 되기때문에 실행하지 않구요, &&의 경우에는 앞의 식이 거짓일 경우 뒤의식은 연산해봐야 식이 거짓이 되므로 연산을 더이상 수행하지 않습니다.
 
Real_G  [04/17 01:00]  ::
그런 거였군요
||를 하면서는 전혀 생각을 못하다가 &&을 해보면서 그럴꺼 같다고 생각되서 volatile를 썼는데
volatile도 소용없는거였군요
반응형

'C & C++ 관련' 카테고리의 다른 글

NULL과 \0의 관계  (3) 2008.04.17
C의 && || 연산  (2) 2008.04.17
popen  (0) 2008.02.11
블럭 데이터의 입출력  (0) 2008.02.11
Posted by Real_G

댓글을 달아 주세요

  1. 지구에서 윤리책 다음으로 싫어하는 연산자 우선순위 문제네요 ㅠ.ㅠ
    상당히 까다롭고 쓸데 없는 문제중에 하나인데 말이죠
    저는 괄호를 남발한다고 할 정도로 우선순위 신경 안쓰도록 하는 주의인데.. 프로그래밍 언어론에 나오는 용어를 언급하자면, 저런 문장은 readability가 떨어지기 때문에 좋지 않은 문장이다! 라고 하더라구요
    일단 연산자 우선순위를 적어 보자면
    z= (y=x)||(++x);
    (y=x) 1위 <- 괄호로 인해서
    || 보다는 ()가 높으므로
    (++x) 2위 <- 좌에서 우로 결합법칙
    || <- 3위
    그래서 다시 정리 하자면
    y=x <- y = 0
    ++x <- x = 1
    z = 0 || 1 <- z = 1
    그래서 101 이 나오게 됩니다

    ++는 참 편하지만 연산자 우선순위로 인해서 상당히 예측이 번거롭게 되므로 되도록이면 ++은 안쓰는 주의라서요 ^^;


    volatile의 경우 일반적으로 하드웨어 장치 제어 할때 쓴다고 들었는데, 위에 서술된거 처럼 컴파일러 최적화 옵션에 따라서 z = .. 가 연속으로 나올 경우 서로 연관이 없는 수식이라면 마지막 결과만이 필요 하므로 컴파일러 수준에서 마지막 수식만을 컴파일 하기 때문에, 매번의 값이 의미가 있는 하드웨어 제어라던가, 식에 대해서는 volatile을 쓰라고 되어 있습니다.

    오늘도 링크 하나 걸어 드리고 가용~
    [http://blog.naver.com/morpheuz82/130027582619]

    • ㅎㅎ 또 방문해주셨네요.
      감사합니다. 링크해 주신것도 들어가서 잘 읽어보았습니다.
      그런데 자주 뵙게 되니까 살짝 구차니님에 대해서 궁굼해 지네요.
      블로그에 가도 직장다니신다는 것 정도밖에 모르겠더라구요 ㅎㅎ