LOGICAL 변수의 내부 표현

LOGICAL 변수의 내부 표현

LOGICAL 타입 변수가 컴퓨터 메모리 안에서 실제로 어떻게 저장되는지 궁금한 적이 있나요? Fortran 표준은 이 부분을 크게 강제하지 않아서, 컴파일러마다 조금씩 다르게 구현되어 있어요. 이 글에서는 GNU Fortran이 LOGICAL 값을 어떤 식으로 표현하는지 살펴볼게요.

출처: Internal representation of LOGICAL variables

본문

표준이 규정하는 것

Fortran 표준은 LOGICAL 타입 변수가 어떻게 표현되어야 하는지를 구체적으로 정하지 않아요. 다만 기본 종류(default kind)의 LOGICAL 변수가 기본 INTEGER와 기본 REAL 변수와 같은 저장 크기(storage size)를 가져야 한다는 요구사항은 있어요. 이 요구사항을 바탕으로 GNU Fortran은 다음과 같은 내부 표현을 사용해요.

GNU Fortran의 표현 방식

LOGICAL(KIND=N) 변수는 INTEGER(KIND=N) 변수로 표현되는데, 단지 두 개의 값만 허용된다는 점이 달라요. .TRUE.1로, .FALSE.0으로 표현돼요. 그 외의 다른 정수 값이 저장되면 그 동작은 정의되어 있지 않아요(undefined behavior). 즉 그런 상황은 피해야 한다는 뜻이에요.

LOGICAL(KIND=N)  →  INTEGER(KIND=N), 값은 1 또는 0만
  • 1.TRUE.
  • 0.FALSE.
  • 그 외 → 정의되지 않은 동작

함께 보면 좋은 내용

LOGICAL 값의 내부 표현은 인자 전달 규약이나 C와의 상호 운용성에서도 중요하게 작용해요. 실제로 C 코드와 연동할 때 이 표현 방식을 이해하고 있으면 값이 어떻게 넘겨질지 예측하기 쉬워져요.

더 알아보기

  • C 언어와 상호 운용할 때 LOGICAL 값이 어떻게 처리되는지도 함께 살펴보면 전체 그림이 잡혀요.
  • 인자 전달 규약 문서를 읽으면 서브루틴 호출 시 값이 전달되는 방식을 더 깊이 이해할 수 있어요.