Rust의 숫자
2023. 1. 8. 16:29ㆍLanguage/Rust
개요
Rust에서 숫자 타입을 생성하는 방법과 연산이 수행되는 방법에 대해 알아봅니다.
정수와 부동 소수점 수
Rust에서 다른 언어와 다른 점이 몇가지 있다.
1. Rust는 16bit 정수를 32bit로 자동 변환하지 않는다.(명시적으로 이루어 진다.)
2. Rust에서의 숫자는 메서드를 가질 수 있다. 반올림 할 때 round(32.2_f32)가 아닌 32.2_f32.round()로 사용한다.
3. 숫자를 표현 할 때 밑줄(underbar)를 통해 가독성을 높을 수 있다. ex) let x:i64 = 1_000_000
4. 애너테이션을 사용해서 수를 표현 할 수 있다. ex) let x = 33i32; => let x:i32 = 33
이진법, 팔진법, 십육진법의 정수
i8, i16, i32, i64, i128 | 8비트에서 128비트 크기의 부호 있는 정수 |
u8, u16, u32, u64, u128 | 8비트에서 128비트 크기의 부호 없는 정수 |
f32, f64 | 32비트, 64비트 종류가 있는 부도 소수점 수 |
isize, usize | CPU의 '네이티브' 크기를 따르는 정수 ex) 64bit CPU에서는 uszie와 isize는 64bit이다 |
- i는 (+), (-) 부호가 있는 수 이다.
- u는 부호가 없는 수이다. (대신 2배로 표현 가능)
- 부동 소수점(f)는 무한대, 음의 무한대, 수가 아님을 표 할 수 있는 실수이다.
수의 비교
Rust에서도 다른 언와 같이 수를 비교 할 때 (<, > , ==, !=, <=, >=)을 사용한다.
하지만 서로 다른 데이터 타입일 경우는 비교를 할 수 없다. 컴파일 자체가 되지 않는다.
수의 타입 변환
작은 타입을 큰 타입(16bit를 32bit로 변환) 변환 하는 것을 승격(promotion)이라고 하고 안전한 방법이다.
하지만 큰 타입을 작은 타입(32bit를 16bit로 변환)으로 변환하는 것을 강등(demote)라고 하며 위험한 방법이다.
fn main() {
let a = 10;
let b: u16 = 100;
if a < (b as i32) {
println!("a is less than b");
}
}
as를 사용하여 변환 할 수 있지만 rust에서는 실패 할 때를 대비하여 메서드를 사용한다.
use std::convert::TryInto;
fn main() {
let a = 10;
let b: u16 = 100;
let bb = b.try_into()
.unwrap();
if a < bb {
println!("a is less than b");
}
}
'Language > Rust' 카테고리의 다른 글
Rust Dangling Pointer (0) | 2023.02.25 |
---|---|
Rust의 배열 (0) | 2023.01.09 |
Rust의 제네릭(Generic) (0) | 2023.01.09 |
Rust의 반복문 (0) | 2023.01.08 |
Rust 실행 파일 만들기 (0) | 2023.01.08 |