Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

정수(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

정수 변환 함수는 문자형 벡터와 같은 기타 클래스를 정수로 변환하는 경우에도 유용합니다.

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비트 확장 정밀도 연산방식을 사용하는 것처럼 연산을 수행하여 정밀도 손실을 방지합니다.

정수형의 복소수가 포함된 연산은 지원되지 않습니다.

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

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

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

변환으로 인한 정밀도 손실

큰 정수(flintmax보다 큼)로 구성된 숫자형 배열을 생성할 경우 MATLAB은 처음에는 기본적으로 입력값을 배정밀도로 나타냅니다. 이 입력값을 int64 또는 uint64 데이터형으로 변환할 경우 정밀도가 손실될 수 있습니다. 정밀도를 유지하려면 대신 배열의 각 스칼라 요소를 사용하여 int64 또는 uint64를 호출하십시오.

예를 들어, int64를 사용하여 큰 정수로 구성된 숫자형 배열을 64비트의 부호 있는 정수형 배열로 변환합니다. 출력 배열의 정밀도가 손실됩니다.

Y_inaccurate = int64([-72057594035891654 81997179153022975])
Y_inaccurate = 1×2 int64 row vector

   -72057594035891656    81997179153022976

정확한 배열을 반환하려면 대신 각 스칼라 요소를 사용하여 int64를 호출합니다.

Y_accurate = [int64(-72057594035891654) int64(81997179153022975)]
Y_accurate = 1×2 int64 row vector

   -72057594035891654    81997179153022975

R2019b부터 정수의 16진수 값 또는 2진수 값을 사용하여 정수형 배열을 정밀도 손실 없이 만들 수도 있습니다.

Y_accurate = [0xFF000000001F123As64 0x1234FFFFFFFFFFFs64]
Y_accurate = 1×2 int64 row vector

   -72057594035891654    81997179153022975