>백엔드 개발 >C++ >C/C에서 'long long'이 예상과 다르게 동작하는 이유는 무엇입니까?

C/C에서 'long long'이 예상과 다르게 동작하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-08 10:04:01205검색

Why does  `long long` behave differently than expected in C/C  ?

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을 할당하는 줄의 주석 처리를 제거할 때 오류가 발생합니다. "정수 상수는 긴 글자에 비해 너무 큽니다." 그러나 주석 처리된 줄이 있는 코드를 실행하면 여전히 10000000000보다 큰 값이 인쇄됩니다.

이 동작은 유형 추론에 대한 오해에서 비롯됩니다. 리터럴 100000000000은 정수 상수이지만 해당 값이 int 데이터 유형(32비트)의 범위를 초과합니다. 따라서 이는 긴 유형의 상수로 사용됩니다. 그러나 C와 C는 기본적으로 int와 같은 리터럴을 고려하므로 오류가 발생합니다.

이를 해결하려면 접미사를 사용하여 리터럴의 유형을 명시적으로 지정해야 합니다. LL 접미사는 num3을 long long 유형으로 선언합니다.

long long num3 = 100000000000LL;

이 변경으로 인해 오류나 예상치 못한 동작 없이 코드가 성공적으로 컴파일될 수 있습니다.

위 내용은 C/C에서 'long long'이 예상과 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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