정수

정수 에서 Cairo

1개의 연습 문제

정수 소개

integer는 소수 부분이 없는 숫자예요. Cairo에서 정수의 타입 선언은 값을 저장하는 데 프로그래머가 사용할 수 있는 비트 수를 나타내요.

부호 없는 정수는 양수와 숫자 0(영)만 나타낼 수 있어요. 이는 배열 인덱싱과 메모리 관리 같은 특정 프로그래밍 상황에서 유용할 수 있어요.

Cairo는 i 접두사로 시작하는 부호 있는 정수도 지원해요. 이 정수들은 양수와 음수 값을 모두 나타낼 수 있고, 크기는 i8부터 i128까지예요. 각 부호 있는 타입은 해당 타입이 사용하는 비트 수를 $n$이라고 할 때 $-2^{n-1}$ 이상 $2^{n-1} - 1$ 이하의 숫자를 저장할 수 있어요. 예를 들어 i8은 $-2^7$부터 $2^7 - 1$까지의 숫자를 저장할 수 있는데, 이는 $-128$부터 $127$까지와 같아요.

길이 부호 없음 부호 있음
8비트 u8 i8
16비트 u16 i16
32비트 u32 i32
64비트 u64 i64
128비트 u128 i128
256비트 u256 ------

usize라는 특별한 정수 타입도 있어요. 현재로서는 그냥 u32의 별칭이에요. 이 타입은 나중에 Cairo가 MLIR(다단계 중간 표현)로 컴파일될 수 있게 되면 더 뚜렷한 역할을 하게 될지도 몰라요.

Cairo의 정수 리터럴

정수 리터럴은 아래 표에 나온 형식 중 어느 것으로든 작성할 수 있어요. 여러 숫자 타입이 될 수 있는 숫자 리터럴은 57_u8처럼 타입 접미사를 붙여 타입을 지정할 수 있어요. 숫자 리터럴에는 코드 가독성을 높이기 위해 시각적 구분자인 _를 사용할 수도 있어요.

숫자 리터럴 예시
10진수 98222
16진수 0xff
8진수 0o04321
2진수 0b01

그럼 어떤 정수 타입을 사용해야 할지는 어떻게 알 수 있을까요? 정수가 가질 수 있는 최댓값을 어림잡아 보고 알맞은 크기를 골라 봐요. usize를 주로 사용하는 상황은 어떤 종류의 컬렉션을 인덱싱할 때예요.

숫자 연산

Cairo는 모든 정수 타입에서 기대할 수 있는 기본 수학 연산을 지원해요: 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지. 정수 나눗셈은 0 쪽으로 소수 부분을 버려 가장 가까운 정수로 만들어요. 다음 코드는 let문에서 각 숫자 연산을 어떻게 사용하는지 보여줘요:

fn main() {
    // addition
    let sum = 5_u128 + 10_u128;

    // subtraction
    let difference = 95_u128 - 4_u128;

    // multiplication
    let product = 4_u128 * 30_u128;

    // division
    let quotient = 56_u128 / 32_u128; // result is 1
    let quotient = 64_u128 / 32_u128; // result is 2

    // remainder
    let remainder = 43_u128 % 5_u128; // result is 3
}

이 문들에서 각 표현식은 수학 연산자를 사용하고 하나의 값으로 평가된 다음 변수에 바인딩돼요.

Cairo가 제공하는 모든 연산자 목록은 The Cairo Book에서 찾을 수 있어요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요

정수 배우기

연습이 잠겨 있어요

정수 개념을 연습하려면 연습 문제 2개를 더 잠금 해제해요