0은 항상 0이므로 중요하지 않습니다. 그러나 최근 친구와의 토론에서 그는 8 진 리터럴이 오늘날 거의 사용되지 않는다고 말했습니다. † 그리고 실제로 거의 저에 날이 샜다 모든 내 코드에서 정수 리터럴 입니다 즉, 진수 0
.
가 0
진법 리터럴 C ++ 문법에 따라? 표준은 무엇을 말합니까?
† 내가 아는 유일한 용도는 유닉스 파일 권한입니다.
답변
예, C ++ 0
의 8 진 리터럴 입니다.
C ++ 표준에 따라 :
2.14.2 정수 리터럴 [lex.icon]
integer-literal:
decimal-literal integer-suffixopt
octal-literal integer-suffixopt
hexadecimal-literal integer-suffixopt
decimal-literal:
nonzero-digit
decimal-literal digit
octal-literal:
0 <--------------------<Here>
octal-literal octal-digit
답변
접두사가 붙은 정수 값 0
은 8 진 값입니다. 즉, 01은 8 진수 1, 010은 8 진수 10, 10 진수 8, 0은 8 진수 0 (10 진수 및 기타 0)입니다.
예, ‘0’은 8 진수입니다.
@Als의 답변에서 문법 스 니펫의 평범한 영어 번역입니다 🙂
접두사가 붙은 정수는 접두사 0x
가 붙지 않습니다0
. 0x
명시 적으로 다른 접두사입니다. 분명히이 구별을 할 수없는 사람들이 있습니다.
동일한 표준에 따라 계속하면 :
integer-literal:
decimal-literal integer-suffixopt
octal-literal integer-suffixopt
hexadecimal-literal integer-suffixopt
decimal-literal:
nonzero-digit <<<---- That's the case of no prefix.
decimal-literal digit-separatoropt digit
octal-literal:
0 <<<---- '0' prefix defined here.
octal-literal digit-separatoropt octal-digit <<<---- No 'x' or 'X' is
allowed here.
hexadecimal-literal:
0x hexadecimal-digit <<<---- '0x' prefix defined here
0X hexadecimal-digit <<<---- And here.
hexadecimal-literal digit-separatoropt hexadecimal-digit
답변
분명히 0으로 시작하는 모든 정수 리터럴은 실제로 8 진입니다. 이는 0도 포함 함을 의미합니다. 0이 0이므로 차이가 거의 없습니다. 그러나이 사실을 모른다면 당신을 해칠 수 있습니다.
이진수를 십진수 및 16 진수 출력으로 변환하는 프로그램을 작성하려고 할 때 이것을 깨달았습니다. 0으로 시작하는 숫자를 줄 때마다 잘못된 출력을 얻었습니다 (예 : 12가 아닌 012 = 10).
같은 실수를하지 않도록이 정보를 아는 것이 좋습니다.