정수 리터럴 유형: 기본적으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!