Rust - Data Types

Mickey·2022년 1월 12일
0

Rust

목록 보기
5/32
post-thumbnail
post-custom-banner

https://www.tutorialspoint.com/rust/rust_data_types.htm

데이터 타입 시스템은 언어에서 지원하는 다양한 형식의 값을 나타냄
데이터 타입 시스템은 프로그램에 의해 저장되거나 조작되기 전에 제공된 값의 유효성을 검사
이는 코드가 계획한대로 동작하는 것을 보장
데이터 타입 시스템은 더욱 풍부한 코드 힌트와 자동화된 문서화를 허용

Rust는 정적 타입 언어
Rust의 모든 값은 특정 데이터 형식
컴파일러는 할당된 값을 기반으로 변수의 데이터 형식을 자동으로 유추

변수 선언

let 키워드로 변수 선언

fn main() {
   let company_string = "TutorialsPoint";  // string type
   let rating_float = 4.5;                 // float type
   let is_growing_boolean = true;          // boolean type
   let icon_char = '♥';                    //unicode character type

   println!("company name is:{}",company_string);
   println!("company rating on 5 is:{}",rating_float);
   println!("company is growing :{}",is_growing_boolean);
   println!("company icon is:{}",icon_char);
}

위의 예에서 변수의 데이터 형식은 할당된 값에서 유추
변수 company_string에 문자열 데이터 형식을 할당하고, Rating_float에 float 데이터 형식을 할당

println 매크로는 두 인수를 받음

  • {} Placeholder
  • 변수이름 또는 상수이름

Scalar Types

스칼라 형식은 단일 값을 나타냄

  • Integer
  • Floating-point
  • Booleans
  • Characters

Integer

Integer는 정수를 나타냄
Signed와 Unsigned로 분류

Sr.No.SizeSignedUnsigned
18 biti8u8
216 biti16u16
332 biti32u32
464 biti64u64
5128 biti128u128
6Archisizeusize

크기가 시스템 아키텍처에서 파생됨
x86에서는 32bit x64에서는 64bit

실예

fn main() {
   let result = 10;    // i32 by default
   let age:u32 = 20;
   let sum:i32 = 5-15;
   let mark:isize = 10;
   let count:usize = 30;
   println!("result value is {}",result);
   println!("sum is {} and age is {}",sum,age);
   println!("mark is {} and count is {}",mark,count);
}


위 코드에서 age 변수를 float 값으로 바꾸면 컴파일 에러 발생

정수 범위

각 부호 있는 변수는 -(2^(n - 1)에서 2^(n - 1) - 1까지의 숫자를 저장
부호 없는 변수는 0 부터 2^n - 1 까지의 숫자를 저장
여기서 n은 변수가 사용하는 비트 수
i8은 -(2^7) 부터 (2^7) - 1 까지 표현
u8은 0 부터 2^8 - 1 까지 표현

정수 오버플로

정수 변수에 할당된 값이 데이터 유형에 대해 Rust가 정의한 범위를 초과하면 정수 오버플로가 발생

fn main() {
    let age:u8 = 255;
 
    // 0 to 255 only allowed for u8
    let weight:u8 = 256;   //overflow value is 0
    let height:u8 = 257;   //overflow value is 1
    let score:u8 = 258;    //overflow value is 2
 
    println!("age is {} ",age);
    println!("weight is {}",weight);
    println!("height is {}",height);
    println!("score is {}",score);
 }


위 예제의 결과는
age is 255
weight is 0
height is 1
score is 2
로 표현되어 있었으나, 실제 rustc로 컴파일 하면 위 그림처럼 에러 발생

Float

Rust의 Float 데이터 유형은 f32와 f64로 분류
f32 유형은 단정밀도 부동 소수점이고 f64 유형은 배정밀도 부동 소수점
기본은 f64

fn main() {
   let result = 10.00;        //f64 by default
   let interest:f32 = 8.35;
   let cost:f64 = 15000.600;  //double precision
   
   println!("result value is {}",result);
   println!("interest is {}",interest);
   println!("cost is {}",cost);
}

Automatic Type Casting

Rust에서는 자동 타입 캐스팅이 허용되지 않음

fn main() {
   let interest:f32 = 8;   // integer assigned to float variable
   println!("interest is {}",interest);
}

Number Separator

큰 숫자를 쉽게 읽을 수 있도록 시각적 구분 기호 _ 밑줄을 사용하여 숫자를 구분할 수 있음

fn main() {
   let float_with_separator = 11_000.555_001;
   println!("float value {}",float_with_separator);
   
   let int_with_separator = 50_000;
   println!("int value {}",int_with_separator);
}

Boolean

bool 형식은 true 또는 false의 두 가지 가능한 값 사용
bool 키워드를 사용하여 부울 변수를 선언

fn main() {
   let isfun:bool = true;
   println!("Is Rust Programming Fun ? {}",isfun);
}

Character

Rust의 문자 데이터 유형은 숫자, 알파벳, 유니코드 및 특수 문자를 지원
char 키워드를 사용하여 문자 데이터 유형의 변수를 선언
Rust의 char 유형은 유니코드 스칼라 값을 표현
ASCII 그 이상을 나타낼 수 있음
유니코드 스칼라 값의 범위는 U+0000 ~ U+D7FF 및 U+E000 ~ U+10FFFF 포함

fn main() {
   let special_character = '@'; //default
   let alphabet:char = 'A';
   let emoji:char = '😁';
   
   println!("special character is {}",special_character);
   println!("alphabet is {}",alphabet);
   println!("emoji is {}",emoji);
}

profile
Mickey
post-custom-banner

0개의 댓글