>백엔드 개발 >C++ >For 루프의 큰 정수 리터럴이 예상과 다르게 동작하는 이유는 무엇입니까?

For 루프의 큰 정수 리터럴이 예상과 다르게 동작하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-14 15:47:111001검색

Why Do Large Integer Literals in For Loops Behave Differently Than Expected?

정수 리터럴 유형: 기본적으로 Int가 아님?

질문:

왜 최대 100억 번까지 반복하는 for 루프는 최대 100억 번까지 반복하는 것보다 시간이 더 오래 걸립니다. 10억?

정답:

루프의 반복 변수가 32비트이고 오버플로되어 무한 루프가 발생합니다. 100억을 나타내는 리터럴은 L 접미사가 없음에도 불구하고 컴파일러에 의해 자동으로 적합한 범위(이 경우 최소 64비트)로 승격됩니다.

C :

C 11 표준([lex.icon] ¶2)에 따르면 접미사가 없는 정수 리터럴의 유형은 다음과 같습니다. 해당 값이 표시될 수 있는 표 6의 첫 번째 항목:

Type
int
long int
long long int

따라서 이 경우 리터럴은 long int 또는 long long int(long int가 32비트인 경우)로 해석됩니다.

C:

C99에서 ([§6.4.4.1]) 규칙은 유사합니다. 정수 상수의 유형은 해당 값이 표시될 수 있는 유사한 목록의 첫 번째 유형에 의해 결정됩니다.

구현 정의 유형:

둘 다 C 11( [lex.icon] ¶3) 및 C99([§6.4.4.1 ¶5])에서는 정수 리터럴이 "확장 정수"가 되는 것을 허용합니다. 다른 유효한 유형이 발견되지 않은 경우"(구현별 정수 유형)입니다.

위 내용은 For 루프의 큰 정수 리터럴이 예상과 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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