정수 오버플로우 메소드

백엔드&인프라 추종자·2025년 7월 12일

rust 공부

목록 보기
12/14

Rust에서 **정수 오버플로(overflow)**를 안전하게 다루기 위한 메소드들은 다음과 같이 네 가지 주요 종류로 나뉩니다. 이 메소드들은 모두 정수 타입(i32, u32, i64, 등)에 대해 사용할 수 있으며, 오버플로가 발생할 때 어떻게 처리할지를 결정합니다.


✅ 1. wrapping_*

오버플로가 발생해도 wrap-around (순환) 처리

let a: u8 = 255;
let b = a.wrapping_add(1);  // b == 0
메소드설명
.wrapping_add()오버플로 시 0부터 다시 시작
.wrapping_sub()언더플로 시 최대값으로 돌아감
.wrapping_mul()곱셈 후 오버플로 허용

✅ 2. checked_*

오버플로 발생 시 None을 반환 (Option 타입)

let a: u8 = 255;
let b = a.checked_add(1);  // b == None
메소드설명
.checked_add()오버플로 시 None 반환
.checked_sub()언더플로 시 None 반환
.checked_mul()곱셈 오버플로 시 None 반환

주로 안전한 수 계산이 필요한 곳에 사용


✅ 3. overflowing_*

→ **(결과값, 오버플로 여부)**를 반환하는 튜플

let a: u8 = 255;
let (result, overflowed) = a.overflowing_add(1);  // (0, true)
메소드설명
.overflowing_add()오버플로 발생 여부와 결과를 함께 반환
.overflowing_sub()언더플로 포함 여부도 함께 반환
.overflowing_mul()곱셈 오버플로 여부도 함께 반환

값과 오버플로 플래그가 필요한 저수준 계산에 유용


✅ 4. saturating_*

오버플로 시 최소/최대값으로 포화 처리

let a: u8 = 255;
let b = a.saturating_add(1);  // b == 255
메소드설명
.saturating_add()오버플로 시 최대값 반환
.saturating_sub()언더플로 시 최소값 반환
.saturating_mul()곱셈 오버플로 시 최대값

주로 그래픽, 하드웨어 프로그래밍 등에서 안전한 범위 보존을 위해 사용


📌 요약 표

메소드 종류반환 값오버플로 시 동작
wrapping_*값이 순환 (wrap-around)
checked_*OptionNone 반환
overflowing_*(값, bool)결과와 오버플로 여부 반환
saturating_*최대값 또는 최소값으로 포화 처리

✅ 사용 예시 요약

fn main() {
    let x: u8 = 250;

    println!("wrapping: {}", x.wrapping_add(10));      // 4
    println!("checked: {:?}", x.checked_add(10));      // None
    println!("overflowing: {:?}", x.overflowing_add(10)); // (4, true)
    println!("saturating: {}", x.saturating_add(10));  // 255
}

필요하시면 각 방식의 성능, 실제 적용 예제, 비교 벤치마크도 제공해 드릴 수 있습니다.

profile
AI 답변 글을 주로 올립니다.

0개의 댓글