Rust - Basic - 02 - 데이터 형식

데이터 형식

이해

숫자 형식인 isize와 usize의 비트 수는 실행 시스템의 32/64비트 아키텍처에 따라 달라집니다. debug 모드에서는 정수 오버플로가 발생하면 panic이 일어나지만 release 모드에서는 그렇지 않습니다. wrapping_* 메서드는 debug 모드에서도 panic이 발생하지 않게 합니다. checked_* 메서드는 오버플로가 발생하면 None을 반환합니다. overflowing_* 메서드는 값과 함께 오버플로 여부를 나타내는 boolean을 반환합니다. saturating_* 메서드는 오버플로 시 값을 최솟값 또는 최댓값으로 제한합니다. 튜플

let tup: (i32, f64, u8) = (500, 6.4, 1);

let tup = (500, 6.4, 1);
let (x, y, z) = tup;  // 구조 분해 할당

let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;

배열

let a = [1, 2, 3, 4, 5];
let a: [i32; 5] = [1, 2, 3, 4, 5];
let a = [0; 5];  // 빠른 초기화
let a = [[0, 5]; 20];  // 2차원 배열

출처

https://doc.rust-lang.org/book/ch03-02-data-types.html

스칼라 형식

…

정수 형식

또한 isize와 usize 형식은 프로그램이 실행되는 컴퓨터 종류에 따라 달라집니다. 64비트 아키텍처라면 64비트이고 32비트 아키텍처라면 32비트입니다. …

정수 오버플로

0부터 255까지의 값을 저장할 수 있는 u8 형식 변수가 있다고 합시다. 이 변수에 256처럼 범위를 벗어난 값을 대입하려 하면 정수 오버플로가 발생합니다. Rust에는 이 동작과 관련된 규칙이 있습니다. debug 모드로 컴파일할 때 Rust는 정수 오버플로 검사를 포함하므로, 이런 동작이 발생하면 실행 중 프로그램이 패닉합니다. Rust에서는 프로그램이 오류와 함께 종료되는 것을 패닉이라고 합니다. 패닉에 대해서는 9장의 “panic!을 사용한 복구할 수 없는 오류” 절에서 더 자세히 설명합니다. --release 플래그를 사용해 release 모드로 컴파일할 때 Rust는 패닉을 일으키는 정수 오버플로 검사를 포함하지 않습니다. 대신 오버플로가 발생하면 Rust는 2의 보수 래핑을 수행합니다. 간단히 말해 형식이 저장할 수 있는 최댓값보다 큰 값은 해당 형식이 저장할 수 있는 최솟값부터 다시 순환합니다. u8의 경우 256은 0이 되고 257은 1이 되는 식입니다. 프로그램은 패닉하지 않지만 변수의 값이 예상과 다를 수 있습니다. 정수 오버플로의 래핑 동작에 의존하는 것은 오류로 간주됩니다. 오버플로 가능성을 명시적으로 처리하려면 표준 라이브러리가 기본 숫자 형식에 제공하는 다음 메서드군을 사용할 수 있습니다.

  • wrapping_add와 같은 wrapping_* 메서드로 모든 모드에서 래핑합니다.
  • checked_* 메서드는 오버플로가 있으면 None을 반환합니다.
  • overflowing_* 메서드는 값과 오버플로 여부를 나타내는 boolean을 반환합니다.
  • saturating_* 메서드는 값의 최솟값 또는 최댓값에서 포화시킵니다.