> 백엔드 개발 > C++ > 'long' 변수에 큰 정수 리터럴을 할당할 때 코드 조각이 실패하지만 'long long'을 사용할 때는 작동하는 이유는 무엇입니까?

'long' 변수에 큰 정수 리터럴을 할당할 때 코드 조각이 실패하지만 'long long'을 사용할 때는 작동하는 이유는 무엇입니까?

DDD
풀어 주다: 2024-11-08 11:12:02
원래의
259명이 탐색했습니다.

Why does the code snippet fail when assigning a large integer literal to a `long` variable, but works when using `long long`?

C/C에서 'long long'의 동작 이해

C/C에서 정수 데이터 유형으로 작업할 때 다음 사항이 중요합니다. 정수 표현의 미묘한 차이를 이해합니다. 특정 데이터 유형인 'long long'은 종종 그 동작에 대한 의문을 제기합니다.

다음 코드 조각을 고려하세요.

#include <stdio.h>

int main() {
    int num1 = 1000000000;
    long num2 = 1000000000;
    long long num3;
    // num3 = 100000000000;
    long long num4 = ~0;

    printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3));
    printf("%d %ld %lld %llu", num1, num2, num3, num4);

    return 0;
}
로그인 후 복사

이 코드를 실행할 때 다음과 같은 경우 오류가 발생할 수 있습니다. 주석 처리된 줄의 주석 처리를 해제하세요:

// num3 = 100000000000;
로그인 후 복사

오류 내용:

"error: 정수 상수가 긴 유형에 비해 너무 큽니다."

그런데 해당 행의 주석 처리를 제거하지 않고 코드를 컴파일하고 실행하면 10000000000보다 훨씬 큰 값이 출력됩니다. 왜 그럴까요?

정수 이해 리터럴 및 데이터 유형

C/C에서는 정수 리터럴은 숫자 값을 나타내는 상수입니다. 정수 리터럴의 유형은 'L' 또는 'LL'과 같은 접미사에 의해 결정됩니다. 접미사가 없으면 리터럴은 기본적으로 'int'로 처리됩니다.

제공된 코드에서 '100000000000' 값은 너무 커서 'long' 데이터 유형으로 표현하기 어렵습니다. 따라서 의도한 데이터 유형을 나타내기 위해 접미사를 추가해야 합니다.

리터럴을 올바르게 할당

오류를 해결하려면 올바른 접미사를 사용하여 리터럴을 할당해야 합니다. , 아래와 같이 표시됩니다.

long long num3 = 100000000000LL;
로그인 후 복사

접미사 'LL'은 리터럴은 더 넓은 범위의 값을 수용할 수 있는 'long long' 유형으로 처리되어야 합니다.

업데이트된 줄은 오류를 유발하지 않고 '100000000000' 값을 'num3'에 할당합니다. 이렇게 하면 변수 'num3'이 의도한 큰 숫자 값을 보유하고 연산할 수 있습니다.

위 내용은 'long' 변수에 큰 정수 리터럴을 할당할 때 코드 조각이 실패하지만 'long long'을 사용할 때는 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿