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

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

DDD
DDD원래의
2024-11-07 17:23:03762검색

Why does 'long long' behave differently than 'int' or 'long' in C/C  ?

C/C에서 Long Long 이해

C 및 C에서 'long long' 데이터 유형은 64비트의 부호 있는 정수를 나타냅니다. 정밀함. 이를 통해 'int' 또는 'long'과 같은 표준 정수 유형으로 수용할 수 없는 매우 크거나 작은 숫자를 표현할 수 있습니다.

제공된 코드 조각에서 'long'의 동작과 관련하여 몇 가지 질문이 제기되었습니다. long' 변수:

  • 'long long'의 크기: 왜 'sizeof(num3)'는 초기화되지 않은 변수를 나타내는 0을 생성합니까?
  • 정수 오버플로: 주석 처리된 줄('num3 = 100000000000;')이 주석 처리되지 않은 경우 코드가 오류 없이 컴파일 및 실행되어 10000000000보다 훨씬 큰 값을 생성하는 이유는 무엇입니까?
  • 리터럴 정수 상수 : 'long' 유형 제한보다 큰 정수 상수를 'long' 변수에 할당하면 컴파일 오류가 발생하는 이유는 무엇입니까?

'long long'의 크기:

'sizeof' 연산자는 변수 또는 데이터 유형의 크기를 바이트 단위로 반환합니다. 'num3'은 어떤 값으로도 초기화되지 않았기 때문에 초기화되지 않은 상태로 유지되고 크기가 정의되지 않아 0이 됩니다. 이 문제를 해결하려면 'long long' 값으로 'num3'을 명시적으로 초기화하세요.

정수 오버플로:

C는 정수 오버플로를 자동으로 처리합니다. 변수에 할당된 값이 용량을 초과하면 가장 낮은 값부터 계속해서 계산됩니다. 이 경우 'long' 변수에 10000000000을 할당하면 오버플로가 발생하고 결과는 음수 값이 됩니다. 그러나 'num2'는 'long long'이므로 큰 값을 오버플로 없이 수용할 수 있습니다.

리터럴 정수 상수:

C 및 C에서는 정수 상수는 강력한 형식입니다. 대상 데이터 유형의 제한을 초과하는 리터럴 정수 상수를 할당하면 컴파일 오류가 발생합니다. 이 예에서 상수 100000000000은 'long' 범위를 초과하며, 'LL'을 추가하면 'long long' 상수로 처리되어야 함을 명시적으로 지정합니다.

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

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