리터럴, 연산자

정수 1, 부동 소수점 1.2, 문자 'a', 문자열 "abc", boolean true, 유닛 타입 ()은 리터럴로 표현할 수 있습니다.

정수는 0x, 0o, 0b 접두사를 사용해 각각 16진수, 8진수, 2진수로 표기할 수 있습니다.

숫자 리터럴에 언더스코어(_)를 추가하여 가독성을 높일 수도 있습니다. 1_0001000과 같고, 0.000_0010.000001와 같습니다.

원하는 타입의 리터럴을 사용하려면 컴파일러에게 타입을 알려주어야 합니다. 이번에는 부호 없는 32비트 정수 리터럴을 u32 접미사로 표시하고, 부호 있는 32비트 정수 리터럴을 i32 접미사로 표시하겠습니다.

러스트에서 사용 가능한 연산자와 연산자 우선 순위는 다른 C언어계 언어(C-like languages)와 유사합니다.

fn main() {
    // 정수 덧셈
    println!("1 + 2 = {}", 1u32 + 2);

    // 정수 뺄셈
    println!("1 - 2 = {}", 1i32 - 2);
    // TODO ^  `1i32`를 `1u32`로 바꿔보면 타입이 중요한 이유를 알 수 있습니다.

    // boolean 논리 연산
    println!("true AND false = {}", true && false);
    println!("true OR false = {}", true || false);
    println!("NOT true = {}", !true);

    // 비트 연산
    println!("0011 AND 0101 = {:04b}", 0b0011u32 & 0b0101);
    println!("0011 OR 0101 = {:04b}", 0b0011u32 | 0b0101);
    println!("0011 XOR 0101 = {:04b}", 0b0011u32 ^ 0b0101);
    println!("1 << 5 = {}", 1u32 << 5);
    println!("0x80 >> 2 = 0x{:x}", 0x80u32 >> 2);

    // 언더스코어를 사용해 가독성을 높였습니다.
    println!("백만을 숫자로 쓰면 {}입니다", 1_000_000u32);
}