논리 연산 설명 부탁드리겠습니다.
단화한
#include stdio.h
void main()
{
int x=1, y=2, z=3, k;
k = ++x || ++y && ++z;
printf(%d %d %d %d\n, k,x,y,z);
}
////////////////////////////////////////결과값이 1 22 3 나오는데
전체적으로 설명 좀 ㅠ y가 생각하는 거랑 다르게 나와서
y가 왜 2가 나오는지... 누가 설명 좀 해주세요~~
-
말달리자
아 결론은.. 그럼 전체 문장에 판단해서 숏서킷을 하는거네요 ㅎㅎ 저는 &&, || 하나 하나 따져서 ++증가 시켜서 답이 안나온거 같아요 ... 전체 문장에서 참일때 숏서킷해서 x값만 증가 시킨거 맞죠??ㅎ
-
가지등
(x||(y&&z)) 을 그냥 x||값 꼴로 연산하나 보네요. 그러면 y조차 계산 안할수 있습니다.
-
소심한녀자
왼쪽에서 부터 연산이되면 숏서킷에의해 ++x까지만 됩니다. 저 둘의 순서를 ++y && ++z || ++x 로 바꾸면 x 가 1로 왼쪽부터 연산되고 조건을 만족시키면 뒤를 생략한다는걸 알 수 있습니다.
-
말글
아 제가 잘못 적엇어요 결과값이 1 2 2 3 이 나옵니다ㅠㅜ 컴파일돌리면... 왜 1 2 2 3 이 나오는지 모르겟네요..
-
핫핑크
우선순위 말하시는거 같은데 괄호치면 (x||(y&&z)) 순섭니다. y가 참이니 z연산을 안할테고, x가 참이고 y가 참이니 k는 1
1, 2, 3, 3 맞는데요 뭐 -
놓아줄게요
그래서 제가 질문을 올렷는데 님 소스한번 보세요 결과값이 님 생각하는거랑 다르게 나올껍니다 정상적으러 나오면 풀이과정좀ㅠㅜ
-
나라우람
&&는 반대의 경우로 앞의 것이 거짓이면 참이나올 이유가 없죠.
-
뽀그리
||은 알고잇는데 ... &&논리곱은 둘다 참이어야 참인데 && 곱도 숏서킷에 해당대는거에요??