program tip

숫자 리터럴의 ULL 접미사

radiobox 2020. 11. 15. 11:06
반응형

숫자 리터럴의 ULL 접미사


다음과 같은 코드를 실행했습니다.

line += addr & 0x3fULL;

분명히 'U'와 'L'은 16 진수가 아닙니다. 16 진수 리터럴 끝에있는 'ULL'이 "Unsigned Long Long"을 의미한다고 생각합니다. 맞습니까? (이런 종류의 것은 Google에 매우 어렵습니다) 그렇다면 이것이 숫자에 대한 일종의 접미사 수정 자입니까?


로부터 gcc 수동 :

ISO C99는 최소 64 비트 너비의 정수에 대한 데이터 유형을 지원하며 확장으로 GCC는 C90 모드 및 C ++에서이를 지원합니다. 간단하게 쓰기 long long int부호있는 정수에 대한, 또는 unsigned long long int부호없는 정수. 유형의 정수 상수를 만들려면 정수 long long int에 접미사 LL추가합니다 . 유형의 정수 상수를 만들려면 정수 unsigned long long int에 접미사 ULL추가합니다 .


네, 맞습니다.

  • 0x 접두사는 16 진수 리터럴이됩니다.
  • ULL접미사는 유형을 만듭니다 unsigned long long.

현재 답변이 크로스 플랫폼 소스에서 인용되지 않는다는 것을 알고 있기 때문에 새로운 답변을 제시하고 있습니다. 표준 리터 지시와 그 / / 접미어되는 문자 유형 : [ 소스 ]UuLLllunsigned long long int

U/ u는 부호없는 정수에 대한 C / C ++ 접미사입니다.
LL/ llC ++ 11long long새로운 유형 이고 길이가 64 비트 이상이어야 하는 정수에 대한 C / C ++ 접미사입니다 .

메모:

  1. 예를 들어 int수정자가 사용되는 경우 키워드를 생략 할 수 있습니다 unsigned long long. 따라서 이것은로 정의 one되며 unsigned long long int할당 된 모든 번호는 다음 static_castunsigned long long int같습니다.unsigned long long one = 1
  2. auto. 변수 유형을 선언시 할당 된 유형으로 설정합니다. 때문에 예를 들어, 2ULLunsigned long long int리터럴은 twoint로서 정의 될 것이다 unsigned long long int:auto two = 2ULL
  3. 는 순서 독립적 인 리터럴 접미사를 도입했습니다. 이전에는 U/ u접미사가 크기 접미사 앞에 와야했습니다. 그러나 년경 접미사가 어느 순서로 허용됩니다, 그래서 지금부터 3LLU되는 unsigned long long int문자가 threeint로서 정의 될 것이다 unsigned long long int:auto three = 3LLU

참고 URL : https://stackoverflow.com/questions/8809292/ull-suffix-on-a-numeric-literal

반응형