이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
MATLAB®에는 부호 있는 정수 클래스와 부호 없는 정수 클래스가 각각 4개씩 있습니다. 부호 있는 형식을 사용하면 음의 정수는 물론 양의 정수도 사용할 수 있지만, 부호 없는 형식만큼 넓은 범위의 숫자를 나타낼 수는 없습니다. 숫자에 양의 기호나 음의 기호를 지정하는 데 1비트가 사용되기 때문입니다. 부호 없는 형식은 더 넓은 범위의 숫자를 나타낼 수 있지만, 이러한 숫자는 0 또는 양수만 가능합니다.
MATLAB은 정수 데이터에 1바이트, 2바이트, 4바이트 및 8바이트 저장 공간을 지원합니다. 사용자 데이터를 수용할 수 있는 최소 크기의 정수형을 사용하면 프로그램에 소요되는 메모리 및 실행 시간을 절약할 수 있습니다. 예를 들어, 값 100
을 저장하는 데 32비트 정수가 필요하지 않습니다.
다음은 8개 정수 클래스, 각각의 유형에 저장할 수 있는 값의 범위, 해당 유형을 생성하는 데 필요한 MATLAB 변환 함수입니다.
클래스 | 값 범위 | 변환 함수 |
---|---|---|
부호 있는 8비트 정수 | -27 ~ 27-1 |
|
부호 있는 16비트 정수 | -215 ~ 215-1 |
|
부호 있는 32비트 정수 | -231 ~ 231-1 |
|
부호 있는 64비트 정수 | -263 ~ 263-1 |
|
부호 없는 8비트 정수 | 0 ~ 28-1 |
|
부호 없는 16비트 정수 | 0 ~ 216-1 |
|
부호 없는 32비트 정수 | 0 ~ 232-1 |
|
부호 없는 64비트 정수 | 0 ~ 264-1 |
|
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