2014-04-30 2 views
0

아래 프로그램의 출력 이유를 이해하려고합니다.이진수로 16 진수 추가

public class CrossAddition{ 
    public static void main(String[] args){ 
    int decimal = 267; 
    int octalValue = 0413; 
    int hexadecimalValue = 0X10B; 
    int binValue = 0b100001011; 
    System.out.println("Decimal plus octal = "+ decimal+octalValue);//267267 
    System.out.println("HexaDecimal plus binary = "+ hexadecimalValue+binValue);//267267 
    } 
} 

여기서이 문제 제 SYSOUT에서 octalValue 내 분석 즉 ..는 octalVlaue 0413의 십진수 267 + 267 534되어야하기 (267)이고, 소수점으로 변환된다. 하지만 여기에서 첫 번째 sysout의 출력은 267267입니다.

두 번째 sysout, hexadecimalValue 0X10B는 먼저 267을 출력하는 십진수로 변환됩니다. 그리고 binValue는 267을 출력하는 십진수로 변환됩니다. 다시 267 + 267이되어야합니다. 하지만 실제로는 그렇지 않습니다. 표시되는 숫자는 267267입니다.

문자열 연결과 비슷합니다. 어떻게 이것을 이해할 수 있습니까?

System.out.println("Decimal plus octal = "+ (decimal+octalValue)); 
System.out.println("HexaDecimal plus binary = "+ (hexadecimalValue+binValue)); 

"Decimal plus octal = "+ decimal+octalValue 다음과 같은

+0

왼쪽에서 오른쪽으로 '+'가 해석됩니다. 다른 컨텍스트에서 오른쪽 '+'는 숫자 추가를 발생시킵니다.이 경우 왼쪽 피연산자는 이미 문자열이므로 문자열에 추가됩니다. –

답변

4

사용은 String("Decimal plus octal = ")+ String(deimal)+String(octalValue) 따라서 문제로 처리된다. 왼쪽에서 오른쪽으로 처음 "진수 플러스 진수 = 267"하고 OUPUT이 될 것이다, 그래서 다음에 octalValue을 추가합니다 문자열 소수를 추가합니다 있도록

당신은 오히려 String("Decimal plus octal = ")+ String(deimal + octalValue)

+0

정확하지만 자세한 설명을 주시면 도움이 될 것입니다 –

+0

Jon에게 감사드립니다. 설명이 추가되었습니다. –

3

자바 같은 작업을 시작합니다 "10 진수 + 8 진수 = 267267"

관련 문제