リテラルと演算子

整数の1、浮動小数点数の1.2、文字の'a'、文字列の"abc"、真偽値のtrue、 そしてユニット型の()などは、リテラルで表すことができます。

整数は0x0o0bなどのプレフィックスをつけることで、 16進数、8進数、2進数でも表すことができます。

また、可読性のため、数値にアンダースコアを挟むことができます。 例えば 1_0001000と同じで、0.000_0010.000001と同じです。

コンパイラにリテラルの型を教えてあげなければいけません. 現在は、 u32サフィックスでリテラル32ビット符号なし整数になり、i32サフィックス で32ビット符号付き整数になります。

Rustで使える演算子や、その優先順位は、Cのような言語 と似ています。

fn main() {
    // 整数の足し算
    println!("1 + 2 = {}", 1u32 + 2);

    // 整数の引き算
    println!("1 - 2 = {}", 1i32 - 2);
    // TODO ^ `1i32`を`1u32`に変えてみて、型の重要さを実感してみてください。

    // 真偽値の短絡評価
    println!("true AND false is {}", true && false);
    println!("true OR false is {}", true || false);
    println!("NOT true is {}", !true); // 真でないものは{}

    // ビット演算
    println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101);
    println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101);
    println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101);
    println!("1 << 5 is {}", 1u32 << 5);
    println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2);

    // アンダースコアを使って可読性を上げましょう!
    println!("One million is written as {}", 1_000_000u32); // 100万は{}と書きます
}