@addWithOverflow

@addWithOverflow

덧셈을 하면서 정수 오버플로(overflow)가 났는지까지 같이 알아내는 내장 함수예요. 결과값만 받는 a + b와 달리, 이 함수는 연산 결과와 함께 "올림(overflow) 비트"가 담긴 튜플을 돌려줘요.

출처: Zig Documentation

본문

@addWithOverflow는 다음과 같은 시그니처를 가져요.

@addWithOverflow(a: anytype, b: anytype) struct { @TypeOf(a, b), u1 }

a + b를 수행해서, 그 결과와 가능한 오버플로 비트(overflow bit)가 담긴 튜플을 반환해요.

abanytype이라 타입이 미리 정해지지 않고, 실제로 넘어온 피연산자 타입에 따라 결정돼요. 반환 타입이 struct { @TypeOf(a, b), u1 }인 걸 보면 알 수 있죠 — 첫 요소는 두 피연산자와 같은 타입(@TypeOf(a, b))의 덧셈 결과이고, 두 번째 요소는 오버플로 여부를 나타내는 u1 비트예요. 이 비트가 1이라면 뭔가 넘쳐 흘렀다는 뜻이에요.

덧셈 결과가 타입이 담을 수 있는 범위를 벗어날 수 있는 상황에서, 그 사실을 조용히 넘기지 않고 튜플로 잡아내고 싶을 때 쓰면 돼요.

더 알아보기

Zig에는 오버플로를 다루는 비슷한 계열의 내장 함수들이 더 있어요. 뺄셈·곱셈과 함께, 부호 있는 정수(signed)와 부호 없는 정수(unsigned) 버전이 각각 제공돼요.