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 매크로는 두 인수를 받음
스칼라 형식은 단일 값을 나타냄
Integer는 정수를 나타냄
Signed와 Unsigned로 분류
Sr.No. | Size | Signed | Unsigned |
---|---|---|---|
1 | 8 bit | i8 | u8 |
2 | 16 bit | i16 | u16 |
3 | 32 bit | i32 | u32 |
4 | 64 bit | i64 | u64 |
5 | 128 bit | i128 | u128 |
6 | Arch | isize | usize |
크기가 시스템 아키텍처에서 파생됨
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로 컴파일 하면 위 그림처럼 에러 발생
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);
}
Rust에서는 자동 타입 캐스팅이 허용되지 않음
fn main() {
let interest:f32 = 8; // integer assigned to float variable
println!("interest is {}",interest);
}
큰 숫자를 쉽게 읽을 수 있도록 시각적 구분 기호 _ 밑줄을 사용하여 숫자를 구분할 수 있음
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);
}
bool 형식은 true 또는 false의 두 가지 가능한 값 사용
bool 키워드를 사용하여 부울 변수를 선언
fn main() {
let isfun:bool = true;
println!("Is Rust Programming Fun ? {}",isfun);
}
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);
}