안녕하세요...
프로그래머를 꿈꾸는 꼬꼬마입니다.
오늘 공부하다가 궁금한게 생겨서 그런데.. 도무지 모르겠어서 올립니다.
java 로 짜여진 소스는
public static void main(String[] args)
{
int x = 0;
int y = 0;
while(x<5)
{
if(y<5)
{
x = x++;
if(y<3)
{
x= x--;
}
}
y = y+2;
System.out.println(x + \" \" + y + \" \");
x = x + 1;
}
}
입니다. 돌아가면 콘솔창에 출력이
0 2
1 4
2 6
3 8
4 10
이 나옵니다. 하지만 c 로 돌릴경우
0 2
1 4
3 6
4 8
로 나오는데 어떤것때문에 그런지 알려주세요..
if 문 차이인지 while 문 차이인지 도무지 모르겠습니다.
손으로 풀어봐도 ... c로 돌린것같은 경우가 나오는데
java 에서는 저렇게 답이 나와버리니 ㅠㅠ
프갤 횽님들 꼭 알려주세요~ ㅠㅠ
추가 입니다----------------------------
#include <stdio.h>
void main()
{
int x = 0;
int y = 0;
while(x<5)
{
if(y<5)
{
x = x++;
if(y<3)
{
x= x--;
}
}
y = y+2;
printf(\"%d %d\\n \",x,y);
x = x + 1;
}
}
지금 고민해본결과 객체지향과 절차지향의 차이인듯 한데...
자세히 모르겠네요 ㅠㅠ
C소스는 안올리시나요..
c소스는 저거랑 같고요, 출력문만 바꿔서 실행하였습니다.
호.. 신기하네요
그래도 혹시 모르니 c코드도 같이올려주세여
자바에선 안쪽에 있는 if 문이 작동을 안하네요 \',.\';
네~ 왜 작동을 안할지;;; x = x++ 과 x = x+1 의 차이도 있네요 ㅠㅠ
x=x++ 이랑 x=x+1 은 존내 다르다.
x+1 의 의미는 ++x 아닙니콰? x=x++ 은 x=x 의 의미구요
x++는 x=x;x=x+1 이고 x=x+1 이 ++x임
아 전위연산이었구나;;
역시 승리의 유리한!!!!!!!!!1
아직도 수업 교재에 저딴 코드 실리나여?
그보다 C컴파일러가 ㅂㅈ 아님? dev에서 java 결과와 똑같이 출력된다.
뭐 하여간 코드내에서 x=x++ 같은거 쓰면 컴파일러가 뭔 ㅄ짓을할지 장담 못함.
1을 언제 뺄지 모르는게지.
while 찍고 -할지 보자마자 -할지..
질문! x=x++를 해야 할 때가 있음?
없음
x=x++ 가 사람생각대로 x=x; x++; 가 되는게 아니라 x=x; 이것저것... x++; 이 될수도.. 나도 자세히는 모르고 밑의 횽의 설명해줄꺼야.
없으면 상관없지만 유리한 횽 감사염 ^^
유리한님 감사합니다. ^^ 질문하나가 더 있는데요~
혹시 x = x--; 도 x=x; 로 받아들여도 괜찮은지요?
스카노// 아니 횽 애초에 x = x--를 쓰려는 이유가 뭔지......
x=x; 를 실행한 뒤에 x--를 실행하는데 내 실력이 미천하여 저놈들이 연속으로 실행되지 않을수도 있다는것 말고는 잘 모르겠고.. x=x 로 이해하면한되고 x=x 후에 x--를 한다고 생각 ㄳ
컴파일러마다 약간씩 다를듯.. 최적화의 문제일 가능성도.. 자세한건 본좌급 횽님들을 소환해봐
저런 쓰잘데 없는 코드는 만들지 말고..
저런 경우가 생기는 원인은 c에서 피연산자의 값을 evaluate하는 순서 컴파일러에 따라 달라; 비슷한 예로 arr[i] = i++; 여기서 arr의 몇번째 요소에접근할지는 컴파일러에 따라 달라; 그렇게 한 이유는 각 머신에따라서 적합한 순서로 코드를 생성하도록 해준거야
x=x++이라고 할 이유는 \"전혀\" 없다. x++이라고만 하면 x가 1 증가된다.
1학년때 연산자 우선순위 공부하고 그러면 저런 코드를 짜구, 과연 값은 뭐가 될까 궁금해하구 한번씩은 하기 마련이긴한데.. 좋은 책이라면은 언급을 해줘야지.. 하간 c표준에서는 각 머신에 적절한 코드를 만들도록 컴파일러한테다가 재량권을 준거니, 저런 side effect가 있는 건 프로그래머가 조심해야되; 그거말고도 c는 이것저것 실수할수 있는 자유가 엄청 많은 그런 언어야;;
오 이거 신기하네...ㅋㅋㅋ
알고리즘적으로 생각해볼때 C++처럼 돌아가는게 맞는거 같은데..잼있는건 후위 연산자 쪽은 걍 연산자로 바꿔쓸때 더 잼있는 게 발생..ㅋㅋ
아 물론 자바에서..