Rust의 숫자

2023. 1. 8. 16:29Language/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