자료형

HaeJin Lee·2023년 5월 4일
0

Rust

목록 보기
1/3
post-thumbnail

Comments

  • 한 줄은 '//' 로 표시
  • 여러 줄은 /* */ 로 표시

Types

integers

  • 여느 언어처럼 signed, unsigned 존재
  • 크기를 bit로 표현
    - isize : i8i16i32i64i128
    - usize : u8u16u32u64u128

Chars

  • u32 size(4 bytes) 크기를 가짐
  • 해당 크기로 인해 사실상 모든 문자를 표현 가능함
  • ACSII 코드, Unicode(UTF-8), 특수문자도 표현 가능
fn main() { 
	let first_letter = 'A'; 
	let space = ' '; // A space inside ' ' is also a char 
	let other_language_char = 'Ꮔ'; // Thanks to Unicode, other languages like Cherokee display just fine too 
	let cat_face = '😺'; // Emojis are chars too 
}

Casting

  • as를 사용해 원하는 자료형으로 캐스팅 가능
fn main() {
	let my_number: u16 = 8;
	let second_number: u8 = 10;
	let third_number = my_number + second_number as u16;
}
  • ASCII는 255까지만 존재하므로 안전하게 char로 casting이 가능함.
fn main() {
	let my_number = 100;
	println!("{}", my_number as char);
	// let my_number = 'a' as u8;
	// println!("{}", my_number);
 }

String

  • char 는 4 bytes 크기를 가짐
  • std::mem::size_of::<char>() : std라이브러리.mem모듈.sizeof함수
fn main() {
    println!("{}", std::mem::size_of::<char>()); 
} 
// or
use std::mem::size_of;

fn main() {
    println!("{}", size_of::<char>()); 
} 
  • ==Rust==에서 len() 함수는 byte 크기를 말함
fn main() {
    println!("{}", "a".len()); // result: 1 - ASCII코드로 256안에서 표현가능
    println!("{}", "ß".len()); // result: 2
    println!("{}", "ßßßßß".len()); // result: 10
    println!("{}", "国".len()); // result: 3
    println!("{}", "𓅱".len()); // result: 4
}
  • chars() 함수는 stringchar 리스트 형태로 표현함
  • string 길이를 출력할 땐 STRING.chars().count() 로 표현

Type Inference

컴파일러에게 자료형을 명시하지 않아도 가능다하다면 자체적으로 결정한다는 것을 의미

  • 숫자는 자료형을 숫자 뒤에 표시 가능
  • '_' 문자로 읽기 편하게 표시 가능, 개수 무관
fn main() {
    let small_number: u8 = 10;
    let small_number = 10u8; // 10u8 = 10 of type u8
    let small_number = 10_u8; // This is easier to read
    let big_number = 100_000_000_i32; // 100 million is easy to read with _
}

Floats

  • 숫자에 '.' 를 추가만 해도 floats으로 인식
fn main() {
    let my_number = 9.;
}
  • f32, f64 두 가지 존재
  • 충분히 빠르기 때문에 대부분 f64를 사용(+ f32는 정확도가 떨어질 수 있기 때문에)
  • 두 타입 동시에 사용 불가능하며 변수를 더할 때 한 쪽이 타입 명시가 되어있지 않다면 타입이 명시된 변수의 타입을 선택함
  • integer 로 변환 시 소수점 이하는 절삭해버림
fn main() {
    let my_number = 9.7;
    let my_number_2 = 9;
    
    println!("{}", my_number as i32 +my_number_2)
}
// 18

0개의 댓글