[c++] 0은 십진 리터럴입니까 아니면 8 진 리터럴입니까?

0은 항상 0이므로 중요하지 않습니다. 그러나 최근 친구와의 토론에서 그는 8 진 리터럴이 오늘날 거의 사용되지 않는다고 말했습니다. 그리고 실제로 거의 저에 날이 샜다 모든 내 코드에서 정수 리터럴 입니다 즉, 진수 0.

0진법 리터럴 C ++ 문법에 따라? 표준은 무엇을 말합니까?

내가 아는 유일한 용도는 유닉스 파일 권한입니다.



답변

예, C ++ 08 진 리터럴 입니다.

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).

같은 실수를하지 않도록이 정보를 아는 것이 좋습니다.


답변