다음 코드 섹션이 실행될 때 정확히 어떤 일이 발생하는지 설명하십시오.
int a='\15';
System.out.println(a);
이것은 13을 출력합니다;
int a='\25';
System.out.println(a);
이것은 21을 출력합니다;
int a='\100';
System.out.println(a);
이것은 64를 출력합니다.
답변
예를 들어 'a'
(큰 따옴표로 구분되는 문자열 리터럴과 구별되는 것과 같이 "a"
) int
변수 에 작은 따옴표로 구분되는 문자 리터럴을 할당했습니다 . Java는 부호없는 16 비트에서 부호 char
있는 32 비트로 자동 확장 캐스트를 수행합니다 int
.
그러나 문자 리터럴이 백 슬래시 뒤에 1-3 자리 숫자가있는 경우 문자의 8 진수 ( 기본 / 기수 8) 표현입니다. 그러므로:
\15
= 1 × 8 + 5 = 13 (캐리지 리턴,과 동일'\r'
)\25
= 2 × 8 + 5 = 21 (NAK 문자-부정적 승인)\100
= 1 × 64 + 0 × 8 + 0 = 64 (@ 기호,와 동일'@'
)
문자 리터럴 및 이스케이프 시퀀스에 대한 자세한 내용은 JLS 섹션을 참조하세요.
3.10.6 에서 BNF 를 인용하면 :
OctalEscape:
\ OctalDigit
\ OctalDigit OctalDigit
\ ZeroToThree OctalDigit OctalDigit
OctalDigit: one of
0 1 2 3 4 5 6 7
ZeroToThree: one of
0 1 2 3
답변
표기법 \nnn
은 Java의 8 진 문자 코드를 나타냅니다. 따라서 10 진수 13 int a = '\15'
인 8 진수 15의 자동 캐스팅 된 값을 할당합니다 a
.
답변
숫자를 따옴표로 묶었다는 사실은 숫자를 문자 리터럴로 해석하는 것 같습니다. 뒤에 오는 숫자는 8 진수 여야합니다.