C의 && || 연산

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



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
popen  (0) 2008.02.11
블럭 데이터의 입출력  (0) 2008.02.11
Posted by Real_G