숫자 타입

숫자 타입 (Numeric types)

Rust의 기본 숫자 타입을 한 번에 훑어볼게요. 정수는 부호 없는 타입과 부호 있는 타입으로 나뉘고, 부동소수점 타입이 따로 있고, 플랫폼에 따라 크기가 달라지는 특별한 타입까지 있어요. 사양 문서인 만큼 타입 이름과 범위 그 자체가 중요한데, 표로 정리해서 보여 드릴게요.

출처: Rust Reference

본문

정수 타입 (Integer types)

부호 없는 정수 타입은 다음과 같아요.

타입 최솟값 최댓값
u8 0 2^8-1
u16 0 2^16-1
u32 0 2^32-1
u64 0 2^64-1
u128 0 2^128-1

부호 있는 2의 보수(signed two's complement) 정수 타입은 다음과 같아요.

타입 최솟값 최댓값
i8 -(2^7) 2^7-1
i16 -(2^15) 2^15-1
i32 -(2^31) 2^31-1
i64 -(2^63) 2^63-1
i128 -(2^127) 2^127-1

부동소수점 타입 (Floating-point types)

IEEE 754-2008의 "binary32"와 "binary64" 부동소수점 타입이 각각 f32f64예요.

기계 의존 정수 타입 (Machine-dependent integer types)

usize 타입은 플랫폼의 포인터 타입과 같은 비트 수를 가지는 부호 없는 정수 타입이에요. 프로세스 안의 모든 메모리 주소를 표현할 수 있죠.

참고: usize가 모든 주소를 표현할 수는 있어도, 포인터를 usize로 변환하는 것이 반드시 되돌릴 수 있는 연산인 것은 아니에요. 자세한 내용은 타입 캐스트 표현식, std::ptr, 특히 provenance 관련 문서를 확인해 보세요.

isize 타입은 플랫폼의 포인터 타입과 같은 비트 수를 가지는 부호 있는 2의 보수 정수 타입이에요. 객체와 배열 크기의 이론적 상한은 최대 isize 값이에요. 덕분에 isize로 객체나 배열 안의 포인터 사이 차이를 계산할 수 있고, 객체 안의 모든 바이트와 끝을 지나는 한 바이트까지 다룰 수 있어요.

usizeisize는 최소 16비트 폭이에요.

참고: 많은 Rust 코드가 포인터, usize, isize가 32비트 또는 64비트라고 가정해요. 그 결과 16비트 포인터 지원은 제한적이고, 라이브러리가 명시적으로 주의를 기울이고 지원한다고 밝혀야 해요.

비트 유효성 (Bit validity)

모든 숫자 타입 T에 대해, T의 비트 유효성은 [u8; size_of::<T>()]의 비트 유효성과 같아요. 초기화되지 않은 바이트는 유효한 u8이 아니에요.

더 알아보기 (Learn more)