superkind
6/29/2018 - 6:29 AM

열거체(Enumerate)

열거체(Enumerate)

enum spectrum = {red, orange, yellow, green, blue, violet, indigo, ultraviolet};
  • spectrum: 열거체(enumeration)
  • red, orange… : 열거자(enumerator)

열거체의 이름을 사용하여 열거형의 변수를 선헌할 수 있다.

spectrum band;  // band는 spectrum형의 변수

열거체 변수에는 열거자만 대입할 수 있다.

band = blue; // 맞음, blue는 열거자
band = 2000; // 틀림, 2000은 열거자가 아님

열거체는 대입 연산만 수행. 산술 연한 허용하지 않음.

band = orange;          // OK
++band;                 // wrong
band = orange + red;    // wrong

열거자들은 정수형이며 int형으로 승급가능. 반대는 불가.

int color = blue;   // 맞다, spectrum형이 int형으로 승급됨
band = 3;           // 틀림, int형이 spectrum형으로 변환되지 않음
color = 3 + red; 

열거체 이름은 생략가능

enum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};

열거자 값 명시적 지정. 일부 열거자에게만 지정 가능.

enum bits {one = 1, two = 2, four = 4, eight = 8};  // 값은 정수여야 함
enum bigstep {first, second = 100, third};      // first=0, third=101
enum {zero, null = 0, one, numero_uno = 1};     // zero와 null은 0, one과 numero_uno는 1

열거체의 값 범위를 지정할 수 있다. 범위는 열거자 중 최대값보다 큰 2의 최소 거듭제곱을 구하고, 거기에서 1을 뺀 것이 상한임. (101 -> 128 -> 127) 하한은 열거자 값 중 최소값이 0이거나 0보다 크면 값 범위의 하한은 0이며, 최소값이 음수이면 상한때와 같은 방법으로 음수 상한을 구하고 마이너스 부호를 붙임. (-6 -> 8 -> 7 -> -7)

enum bits {one = 1, two = 2, four = 4, eight = 8};
bits myflag;
myflag = bits(6);       // 맞음, 6이 bits 범위 안에 있다