5.1.3. 기본 데이터 유형에 대한 연산

ARM 컴파일러는 ISO C99 및 ISO C++ 표준의 관련 섹션에서 설정한 일반 산술 변환을 수행합니다. 다음 소단원에서는 산술 연산과 관련된 추가 사항에 대해 설명합니다.

식 평가도 참조하십시오.

정수 유형에 대한 연산

다음 사항은 정수 유형에 대한 연산에 적용됩니다.

  • 모든 부호 있는 정수의 산술은 2의 보수 표현을 사용합니다.

  • 부호 있는 정수 유형에 대한 비트 단위 연산은 2의 보수 표현에서 기본적으로 발생하는 규칙을 따릅니다. 부호 확장은 발생하지 않습니다.

  • 부호 있는 수량에서 오른쪽 시프트는 산술입니다.

  • int 유형 값의 경우 다음과 같습니다.

    • 0 - 127 범위를 벗어난 시프트는 정의되지 않습니다.

    • 31보다 큰 왼쪽 시프트는 0의 결과를 제공합니다.

    • 31보다 큰 오른쪽 시프트는 부호 없는 값 또는 양의 부호가 있는 값의 시프트에서 0의 결과를 제공합니다. 음의 부호 있는 값의 시프트인 경우에는 -1을 생성합니다.

  • long long 유형의 경우 0 - 63 범위를 벗어난 시프트는 정의되지 않습니다.

  • ISO C99 표준에 따라 정수를 나눈 후 나머지는 제수와 같은 부호를 갖습니다.

  • 정수 유형의 값이 짧은 부호 있는 정수 유형으로 잘리면 결과는 가장 중요한 비트 중 적절한 숫자를 폐기하여 구합니다. 원래 숫자가 양수 또는 음수에 관계 없이 새 유형에 너무 크면 결과의 부호가 원래 숫자의 부호와 같지 않을 수도 있습니다.

  • 정수 유형 간의 변환에는 예외가 발생하지 않습니다.

  • 정수 오버플로에는 예외가 발생하지 않습니다.

  • 정수를 0으로 나누면 기본적으로 0이 반환됩니다.

부동 소수점 유형에 대한 연산

다음 사항은 부동 소수점 유형에 대한 연산에 적용됩니다.

  • 기본 IEEE 754 규칙이 적용됩니다.

  • 기본적으로 가장 가까운 표현 가능한 값으로 반올림됩니다.

  • 부동 소수점 예외는 기본적으로 사용하지 않습니다.

--fpmode=model도 참조하십시오.

Note

부동 소수점 처리를 위한 IEEE 754 표준에 따르면 예외에 대한 기본 조치는 트랩 없는 처리입니다. fenv.h의 함수 및 정의를 조정하여 부동 소수점 오류 처리를 수정할 수 있습니다. 자세한 내용은 2-83페이지의 오류 신호, 오류 처리 및 프로그램 종료 조정을 참조하십시오.

포인터 빼기

다음 사항은 C의 모든 포인터에 적용되며 구성원에 대한 포인터를 제외하고 C++의 포인터에 적용됩니다.

  • 포인터 한 개를 다른 포인터에서 빼면 그 차이가 식의 결과입니다

    ((int)a - (int)b) / (int)sizeof(type pointed to)
    
  • 정렬이 개체의 크기와 같은 개체를 포인터가 가리키면 이 정렬은 나누기가 정확하도록 보장합니다.

  • 패킹된 유형 및 대부분의 struct처럼 정렬이 개체의 크기보다 작은 개체를 포인터가 가리킬 경우 두 포인터 모두 동일한 배열의 요소를 가리켜야 합니다.

Copyright © 2007 ARM Limited. All rights reserved.ARM DUI 0348AK
Non-Confidential