>백엔드 개발 >C++ >C 및 C의 부호 없는 정수 리터럴이 더 큰 유형으로 승격되는 이유는 무엇입니까?

C 및 C의 부호 없는 정수 리터럴이 더 큰 유형으로 승격되는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-12 19:30:15704검색

Why Do Unsigned Integer Literals in C and C   Promote to Larger Types?

접미사가 없는 정수: 필요한 경우 더 큰 유형으로 승격

원래 쿼리에서는 100억 회까지 반복하면 예기치 않은 동작이 발생하는 이유를 탐색했습니다. 한 가지 의혹은 접미사가 없는 정수 리터럴이 일반적인 int 유형으로 기본 설정되지 않을 수 있다는 것입니다.

C와 C 모두에서 이러한 리터럴은 자동으로 적합한 정수 유형으로 승격됩니다. 이렇게 하면 해당 값이 사용 가능한 정수 유형 중 하나 이상의 제한 내에서 표현될 수 있습니다.

C 및 C 표준

C 11 표준( [lex.icon] ¶2) 및 C99 표준(§6.4.4.1)에서는 접미사가 없는 정수 리터럴에 가장 작은 유형이 제공됩니다. 해당 값을 수용할 수 있는 목록은 다음과 같습니다.

  • int
  • long int
  • long long int

100억 개의 경우 , 이 정수 상수는 long int(또는 long int가 다음과 같이 정의된 경우 long long int)로 분류됩니다. 32비트).

지나치게 큰 리터럴에 대한 컴파일 오류

C99와 C 11 모두 허용되는 모든 정수 유형에 대해 표현 가능한 범위를 초과하는 리터럴은 컴파일 오류. 그러나 일부 컴파일러는 초과 숫자를 자동으로 자르거나 삭제하는 등 비표준 방식으로 이를 처리할 수 있습니다.

위 내용은 C 및 C의 부호 없는 정수 리터럴이 더 큰 유형으로 승격되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.