정수 리터럴

Integer literal

컴퓨터 과학에서 정수 리터럴소스 코드로 직접 표현되는 정수에 대한 리터럴의 일종이다.예를 들어, 할당 명세서에서x = 1, 끈1문에서 값 1을 나타내는 정수 리터럴x = 0x10현악기0x10값 16을 나타내는 정수 리터럴이며, 이 값은 다음과 같다.1016진법으로0x접두사를 붙이다

이와는 대조적으로, 에서x = cos(0), 표현cos(0)1로 평가(0의 코사인)하지만 값 1은 말 그대로 소스 코드에 포함되지 않는다.좀 더 간단하게, 안에x = 2 + 2,표현2 + 24로 평가하지만 값 4는 문자 그대로 포함되지 않는다.더 나아가서x = "1""1"문자열 리터럴이지, 따옴표로 되어 있기 때문에 정수 리터럴이 아니다.문자열의 값은1, 이 문자열은 정수 문자열이지만, 이것은 문자열 리터럴의 의미 분석입니다 – 통사적 수준에서."1"단지 끈일 뿐이지, 와 다를 바 없다."foo".

파싱

문자열(소스 코드의 문자 순서)을 정수 리터럴로 인식하는 것은 어휘 분석(lexing) 단계의 일부인 반면, 리터럴을 그 값으로 평가하는 것은 의미 분석 단계의 일부인 것이다.어휘와 구문 문법 안에서, 토큰 클래스는 종종 지적된다.integer, 구문 수준 생산 규칙(예:ListOfIntegers. 일단 문자열을 정수 리터럴로 렉서스(토큰화)하면 그 값은 구문론적으로 결정할 수 없으며(정수일 뿐), 그 값의 평가는 의미론적 문제가 된다.

정수 리터럴은 일반적으로 파이톤에서와 같이 정규식과 함께 어휘된다.[1]

평가하기

다른 리터럴과 마찬가지로, 정수 리터럴은 일반적으로 의미 분석 단계의 일부로서 컴파일 시간에 평가된다.어떤 경우에는 정수 리터럴을 바로 인식하여 렉서(Lexer)에서 이러한 의미분석을 하는 반면, 다른 경우에는 파싱 단계까지 또는 파스 트리가 완전히 구성된 후에까지 이연된다.예를 들어, 문자열을 인식할 때0x10렉서는 즉시 이것을 16까지 평가하고 그것을 저장할 수 있다.integer및 값 16) 또는 평가를 연기하고 대신 유형의 토큰을 기록하십시오.integer그리고 가치0x10.

리터럴을 평가한 후에는 일정한 접기 형태의 추가적인 의미 분석이 가능해져, 리터럴 값을 포함하는 문자적 표현은 컴파일 단계에서 평가할 수 있다.예를 들어, 문장에서x = 2 + 2리터럴을 평가하고 그 표현을 쓴 후에.2 + 2구문 분석은 4로 평가될 수 있지만 4 값은 그 자체로 리터럴로 나타나지 않는다.

아픽스

정수 리터럴에는 base를 나타내는 접두사가 있고, 유형을 나타내는 접미사가 적은 경우가 많다.[1]예를 들어, C++에서 0x10ULL16진수 값을 부호 없는 긴 정수로 나타낸다.

일반적인 접두사에는 다음이 포함된다.

  • 0x또는0X16진수(베이스 16)의 경우,
  • 0,0o또는0O8진수(베이스 8),
  • 0b또는0B2진수(기본값 2)의 경우

일반 접미사에는 다음이 포함된다.

  • l또는L긴 정수의 경우,
  • ll또는LL긴 정수의 경우,
  • u또는U부호 없는 정수의 경우

이러한 붙임성은 시그널이 리터럴이 아니라 식별자(이름)에 붙지만 시그널과 다소 유사하다.

숫자 구분 기호

일부 언어에서 정수 리터럴은 더 읽기 쉬운 형태로 숫자를 그룹화할 수 있도록 숫자 구분자를 포함할 수 있다.이것이 가능하다면, 그것은 보통 부동 소수점 리터럴에 대해서도 할 수 있다.이것은 비트 필드에 특히 유용하며, 숫자를 세는 것이 아니라 서브타이징을 통해 한 눈에 큰 숫자(백만 등)의 크기를 쉽게 볼 수 있다.또한 신용카드 번호나 사회보장번호와 같이 일반적으로 그룹화된 숫자에 유용하다.[a]매우 긴 숫자는 분리자를 두 배로 증가시킴으로써 추가로 분류될 수 있다.

일반적으로 10진수(base-10)는 3자리 그룹(1000개의 가능한 값 중 1개를 나타냄), 2진수 그룹(1 니블, 16개의 가능한 값 중 하나를 나타냄), 2자리 그룹(각 자릿수는 1 니블이므로 2자리는 256개의 주머니쥐 중 하나를 나타냄)으로 그룹화된다.이블 값어치명사적 가치.다른 시스템의 번호(예: ID 번호)는 사용 중인 모든 규칙에 따라 그룹화된다.

에이다,[2][3] C#(버전 7.0부터), D, 에펠, 바둑(버전 1.13부터),[4] 하스켈(GHC 버전 8.6.1부터),[5] 자바(버전 7부터),[6] 줄리아, , 파이썬(버전 3.6부터),[7] 루비, 러스트[8], 스위프트([9]버전 3.6부터), 정수 리터럴과 플로트 리터럴(fltals)를 밑줄로 구분할 수 있다._배치에는 약간의 제약이 있을 수 있다. 예를 들어, 자바에서는 문자 시작이나 끝, 소수점 옆에 나타날 수 없다.마침표, 쉼표 및 (씬) 공백은 숫자 분리를 위해 정규 작문에서는 사용되지만, 이러한 공백은 라딕스 포인트, 목록 구분자(및 쉼표 연산자 C/C++), 토큰 구분자로 프로그래밍 언어에서 기존 사용과 상충된다는 점에 유의하십시오.

예를 들면 다음과 같다.

인트로 백만 = 1_000_000; 인트로 신용 카드 번호 = 1234_5678_9012_3456; 인트로 SocialSecurityNumber = 123_45_6789; 

C++14(2014년)에서는 아포스트로피 문자를 사용하여 임의로 숫자 리터럴로 숫자를 구분할 수 있다.[10]밑줄은 1993년에 처음 제안되었고, C++11에 대해서는 다른 언어에 이어 다시 제안되었다.[11][12]그러나 이로 인해 사용자 정의 리터럴과의 충돌이 발생하여 아포스트로피가 대신 "상단 쉼표"(일부 다른 맥락에서 사용됨)로 제안되었다.[13][14]

자동차로 정수_수치 = 1'000'000; 자동차로 binary_binary = 0b0100'1100'0110; 자동차로 very_long_message_message =     0b0000'0001'0010'0011''0100'0101'0110'0111; 

메모들

  1. ^ 그러나 일반적으로 이와 같은 민감한 숫자는 리터럴로 포함되지 않는다.

참조

  1. ^ a b "2.4.4. 정수 및 긴 정수 리터럴"
  2. ^ "Ada '83 Language Reference Manual: 2.4. Numeric Literals".
  3. ^ ""Rationale for the Design of the Ada® Programming Language": 2.1 Lexical Structure".
  4. ^ "Go 1.13 Release Notes - Changes to the language". Retrieved 2020-11-05.
  5. ^ "Glasgow Haskell Compiler User's Guide: 11.3.7. Numeric underscores". Retrieved 2019-01-31.
  6. ^ "Underscores in Numeric Literals". Retrieved 2015-08-12.
  7. ^ "What's New In Python 3.6".
  8. ^ "Literals and operators". Retrieved 2019-11-15.
  9. ^ "The Swift Programming Language: Lexical Structure".
  10. ^ Crowl, Lawrence; Smith, Richard; Snyder, Jeff; Vandevoorde, Daveed (25 September 2013). "N3781 Single-Quotation-Mark as a Digit Separator" (PDF).
  11. ^ John Max Skaller (March 26, 1993). "N0259: A Proposal to allow Binary Literals, and some other small changes to Chapter 2: Lexical Conventions" (PDF).
  12. ^ Crowl, Lawrence (2007-05-02). "N2281: Digit Separators".
  13. ^ Vandevoorde, Daveed (2012-09-21). "N3448: Painless Digit Separation" (PDF).
  14. ^ Crowl, Lawrence (2012-12-19). "N3499: Digit Separators".