10 진수, 8 진수 및 16 진수 표기법의 정수 리터럴을 이스케이프 문자에서 동일하게 식별합니까?

PrimRock

C ++ Primer의 5 판을 살펴보면로 시작하는 정수 리터럴 0octal. 정수 리터럴 20이 다음 표기법으로 표현되는 방법에 대한이 예제를 남겼습니다 .

 20 `/* decimal */` 024 `/* octal */` 0x14 `/* hexadecimal */`

몇 페이지를 진행하면서 문자를 이스케이프 octal하고 및 hexadecimal숫자를 사용하여 문자의 숫자 값을 나타내는 방법을 소개했습니다 . 나는 이것을 선물 받았다.

std::cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newline
std::cout << '\115' << '\n'; // prints M followed by a newline

a \뒤에 세 octal자리 이상이 오면 처음 세 자리 만 \. 예를 들어 \1234는 두 문자를 나타냅니다 . octal값으로 표시되는 123문자와 문자 4. 반대로, \x뒤에 오는 모든 16 진수를 사용합니다. \x1234이 네 hexadecimal자리에 해당하는 비트로 구성된 단일 16 비트 문자를 나타냅니다 . 대부분의 컴퓨터에는 8 비트 문자가 있기 때문에 이러한 값은 유용하지 않을 것입니다. 일반적으로 hexadecimal8 비트 이상의 문자는 Table 2.2 의 접두사 중 하나를 사용하는 확장 문자 집합과 함께 사용됩니다 .

좋아 decimal, 문자의 숫자 값을 나타낼 때 이스케이프 문자와 함께 사용되지 않거나 a octal정의 된 전체 해석이 이스케이프 문자로 변경됩니까? 나는 뒤에 오지 않으면 octals시작하는 리터럴로 해석 되지만 이전 블록 따옴표에서 읽은 내용은 ...0x

예를 들어 \1234는 두 문자를 나타냅니다 . octal값으로 표시되는 123문자와 문자 4.

그것은 말한다 진수 값을 123 ,하지만이 있습니다 0. 따라서 이스케이프 문자로만 0을 자릅니다. 그렇다면 decimal이스케이프 문자를 사용할 때 리터럴은 어떻게 표현됩니까?

배리

그것은 말한다 진수 값 (123), 그러나 거기에는 0 그래서 그들이 영을 절단 만 이스케이프 문자를하지 않습니다, 그리고 그럼 어떻게 진수 리터럴 이스케이프 문자를 사용하는 경우 표현?

맞습니다. 8 진수 이스케이프 시퀀스를 사용하기 위해 0이 필요하지 않습니다. 문법은 [lex.ccon]에서 다음과 같이 정의됩니다.

octal-escape-sequence:
    \ octal-digit
    \ octal-digit octal-digit
    \ octal-digit octal-digit octal-digit

hexadecimal-escape-sequence:
    \ hexadecimal-digit
    hexadecimal-escape-sequence hexadecimal-digit

또는 :

이스케이프 \ooo는 원하는 문자의 값을 지정하는 데 사용되는 백 슬래시와 1, 2 또는 3 개의 8 진수로 구성됩니다. 이스케이프 \xhhh는 백 슬래시, x, 원하는 문자의 값을 지정하는 데 사용되는 하나 이상의 16 진수로 구성됩니다. 16 진수 시퀀스의 자릿수에는 제한이 없습니다. 8 진수 또는 16 진수 시퀀스는 각각 8 진수 또는 16 진수가 아닌 첫 번째 문자로 종료됩니다. 문자 리터럴의 값은 char(접두사가없는 wchar_t리터럴의 경우 ) 또는 (L이 접두사 인 리터럴의 경우 )에 정의 된 구현 정의 범위를 벗어나는 경우 구현에 정의됩니다 .

따라서 \19값이 1 인 8 진수 리터럴과 값이 9 인 10 진수 리터럴이 있습니다. 10 진수 이스케이프 시퀀스가 ​​없습니다. 여기에 전체 가능성 표가 열거되어 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관