이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

정수(Integer)

정수 클래스

MATLAB®에는 부호 있는 정수 클래스와 부호 없는 정수 클래스가 각각 4개씩 있습니다. 부호 있는 형식을 사용하면 음의 정수는 물론 양의 정수도 사용할 수 있지만, 부호 없는 형식만큼 넓은 범위의 숫자를 나타낼 수는 없습니다. 숫자에 양의 기호나 음의 기호를 지정하는 데 1비트가 사용되기 때문입니다. 부호 없는 형식은 더 넓은 범위의 숫자를 나타낼 수 있지만, 이러한 숫자는 0 또는 양수만 가능합니다.

MATLAB은 정수 데이터에 1바이트, 2바이트, 4바이트 및 8바이트 저장 공간을 지원합니다. 사용자 데이터를 수용할 수 있는 최소 크기의 정수형을 사용하면 프로그램에 소요되는 메모리 및 실행 시간을 절약할 수 있습니다. 예를 들어, 값 100을 저장하는 데 32비트 정수가 필요하지 않습니다.

다음은 8개 정수 클래스, 각각의 유형에 저장할 수 있는 값의 범위, 해당 유형을 생성하는 데 필요한 MATLAB 변환 함수입니다.

클래스

값 범위

변환 함수

부호 있는 8비트 정수

-27 ~ 27-1

int8

부호 있는 16비트 정수

-215 ~ 215-1

int16

부호 있는 32비트 정수

-231 ~ 231-1

int32

부호 있는 64비트 정수

-263 ~ 263-1

int64

부호 없는 8비트 정수

0 ~ 28-1

uint8

부호 없는 16비트 정수

0 ~ 216-1

uint16

부호 없는 32비트 정수

0 ~ 232-1

uint32

부호 없는 64비트 정수

0 ~ 264-1

uint64

정수 데이터 생성하기

MATLAB은 기본적으로 숫자형 데이터를 배정밀도 부동소수점(double)으로 저장합니다. 데이터를 정수로 저장하려면 double에서 원하는 정수형으로 변환해야 합니다. 위의 표에 나와 있는 변환 함수 중 하나를 사용하십시오.

예를 들어, 325를 부호 있는 16비트 정수로 변수 x에 할당하려면 다음을 입력하십시오.

x = int16(325);

정수로 변환할 숫자에 소수부가 있는 경우 MATLAB은 가장 가까운 정수로 반올림합니다. 소수부가 정확히 0.5인 경우 MATLAB은 같은 거리만큼 떨어져 있는 두 인근 정수 중에서 절댓값의 크기가 더 큰 정수를 선택합니다.

x = 325.499;
int16(x)
ans =
	
  int16

   325         

x = x + .001;
int16(x)
ans =

  int16

   326                                      

디폴트 값이 아닌 다른 반올림 체계를 사용하여 숫자를 반올림해야 하는 경우 MATLAB은 4가지 반올림 함수, 즉 round, fix, floor, ceil을 제공합니다. fix 함수를 사용하면 디폴트 값을 재정의할 수 있으며 0이 아닌 소수부가 있는 경우 0 방향의 가장 가까운 정수로 올림 또는 버림할 수 있습니다.

x = 325.9;

int16(fix(x))
ans =

  int16

   325

정수와 부동소수점이 모두 포함된 산술 연산은 항상 정수 데이터형을 결과로 생성합니다. MATLAB은 디폴트 반올림 알고리즘에 따라 필요한 경우 결과를 반올림합니다. 아래 예제의 정확한 답은 1426.75입니다. MATLAB은 이 값을 다음으로 가장 높은 정수로 올림합니다.

int16(325) * 4.39
ans =

  int16

   1427

정수 변환 함수는 string형과 같은 기타 클래스를 정수로 변환하는 경우에도 유용합니다.

str = 'Hello World';

int8(str)
ans =

  1×11 int8 row vector

    72   101   108   108   111    32    87   111   114   108   100

NaN 값을 정수 클래스로 변환하는 경우 결과는 해당 정수 클래스에서 0에 해당하는 값입니다. 예를 들면 다음과 같습니다.

int32(NaN)
ans =

  int32

   0

정수 클래스에 대해 산술 연산하기

MATLAB은 다음 데이터형에 대해 정수 산술 연산을 수행할 수 있습니다.

  • 동일한 정수 데이터형을 갖는 정수 또는 정수형 배열. 이 연산에서는 피연산자와 동일한 데이터형을 갖는 결과가 생성됩니다.

    x = uint32([132 347 528]) .* uint32(75);
    class(x)
    ans =
       uint32
  • 정수 또는 정수형 배열 및 스칼라 배정밀도 부동소수점 숫자. 이 연산에서는 정수 피연산자와 동일한 데이터형을 갖는 결과가 생성됩니다.

    x = uint32([132 347 528]) .* 75.49;
    class(x)
    ans =
       uint32

피연산자 하나는 정수 데이터형으로 구성된 배열(64비트 정수 제외)이고 다른 하나는 double형 스칼라인 모든 이항 연산의 경우 MATLAB은 요소별 배정밀도 산술 연산을 사용하여 연산을 계산한 후 원래 정수 데이터형으로 결과를 다시 변환합니다. 64비트 정수형 배열 및 double형 스칼라를 포함하는 이항 연산의 경우 MATLAB은 80비트 확장 정밀도 산술 연산을 사용하는 것처럼 연산을 계산하여 정밀도 손실을 방지합니다.

정수 클래스의 최댓값과 최솟값

정수 데이터형마다 해당 데이터형을 나타낼 수 있는 최대 숫자와 최소 숫자가 있습니다. 정수(Integer) 아래에 있는 표의 "값 범위" 열에 각 정수 데이터형에 대한 최댓값 및 최솟값이 나와 있습니다.

intmax 함수와 intmin 함수를 사용하여 이러한 값을 구할 수도 있습니다.

intmax('int8')               
ans =

  int8

   127

intmin('int8')   
ans =

  int8

   -128

정수 데이터형의 최댓값보다 큰 숫자를 해당 데이터형으로 변환하는 경우 MATLAB은 이를 최댓값으로 설정합니다. 이와 유사하게, 정수 데이터형의 최솟값보다 작은 숫자를 변환하는 경우 MATLAB은 이를 최솟값으로 설정합니다. 예를 들면 다음과 같습니다.

x = int8(300)
x =

  int8

   127
               
x = int8(-300)
x =

  int8

   -128

또한, 정수를 포함하는 산술 연산의 결과가 해당 데이터형의 최댓값(또는 최솟값)을 초과하는 경우 MATLAB은 이를 최댓값(또는 최솟값)으로 설정합니다.

x = int8(100) * 3
x =

  int8

   127

x = int8(-100) * 3
x =

  int8

   -128