자바

2011-05-02 4 views
2

가능한 중복 : 사용
++i + ++i + ++i in Java vs C자바

자바 :

public class Main { 
    public static void main(String[] args) { 
     int a=10; 
     a=a++; 
     a=a++; 
     System.out.println(a); 
    } 
} 

출력 : 10

사용 터보 C :

void main(){ 
    int a=10; 
    a=a++; 
    a=a++; 
    printf("%d",a); 
} 

출력 : 12 어떻게 된 일입니까?

+0

이름과 값을 구분하기 위해': -'를 사용하지 마십시오. 출력이 음의 값인 것처럼 보입니다. – asgs

+0

그것은 우리 모두를 당신의 마지막 질문에 혼란스럽게 만들었습니다 ... – MByD

답변

13

a=a++undefined behavior입니다. 따라서 두 개의 C 프로그램도 다른 결과를 반환 할 수 있습니다.

접미사 ++은 작업 후에 변수를 증가 시키지만 올바른 표현식을 계산 한 후 또는 할당 후에 변수를 증가시킬 것인지 여부를 알지 못하므로 결과에 영향을 줄지 여부를 알 수 없습니다 아닙니다.

옵션 1 : B 가정

올바른 표현의 계산을 위해 사용 된 임시 레지스터/가변

A를 하나씩 증가 B, A에 할당 B, b에 할당

. 하나의 증분에 할당 B A B A가 b에 할당

:

옵션 2 (a는 동일하다). (a가 증가합니다)

+0

조금 더 설명 해주시겠습니까? – mriganka3

+0

@mrig - 업데이트 된 답변을 참조하십시오. – MByD