Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

演算子

計算や比較を行うための「演算子」について学びます。

算術演算子

数値の計算に使います。

fn main() {
    let a = 10;
    let b = 3;

    println!("足し算: {} + {} = {}", a, b, a + b);  // 13
    println!("引き算: {} - {} = {}", a, b, a - b);  // 7
    println!("掛け算: {} * {} = {}", a, b, a * b);  // 30
    println!("割り算: {} / {} = {}", a, b, a / b);  // 3(整数同士は切り捨て)
    println!("剰余:   {} % {} = {}", a, b, a % b);  // 1(余り)
}
演算子意味
+足し算5 + 38
-引き算5 - 32
*掛け算5 * 315
/割り算5 / 31
%剰余(余り)5 % 32

整数の割り算に注意

整数同士の割り算は小数点以下が切り捨てられます:

fn main() {
    let x = 10 / 3;  // 3(3.333...ではない)
    println!("{}", x);
}

小数点以下が必要な場合は浮動小数点数を使います:

fn main() {
    let x = 10.0 / 3.0;  // 3.333...
    println!("{}", x);
}

型が違うと計算できない

fn main() {
    let a: i32 = 10;
    let b: f64 = 3.0;
    // let c = a + b;  // エラー!型が違う

    let c = a as f64 + b;  // aをf64に変換してから計算
    println!("{}", c);  // 13.0
}

比較演算子

2つの値を比較して、trueまたはfalseを返します。

fn main() {
    let a = 5;
    let b = 3;

    println!("{} == {} は {}", a, b, a == b);  // false
    println!("{} != {} は {}", a, b, a != b);  // true
    println!("{} >  {} は {}", a, b, a > b);   // true
    println!("{} <  {} は {}", a, b, a < b);   // false
    println!("{} >= {} は {}", a, b, a >= b);  // true
    println!("{} <= {} は {}", a, b, a <= b);  // false
}
演算子意味
==等しい5 == 5true
!=等しくない5 != 3true
>より大きい5 > 3true
<より小さい5 < 3false
>=以上5 >= 5true
<=以下5 <= 3false

===の違い

#![allow(unused)]
fn main() {
let x = 5;   // 代入(xに5を入れる)
x == 5       // 比較(xが5と等しいかチェック)
}

初心者がよく間違えるポイントです!

論理演算子

bool値を組み合わせます。

fn main() {
    let a = true;
    let b = false;

    println!("AND: {} && {} = {}", a, b, a && b);  // false
    println!("OR:  {} || {} = {}", a, b, a || b);  // true
    println!("NOT: !{} = {}", a, !a);              // false
}
演算子意味説明
&&AND(かつ)両方trueならtrue
||OR(または)どちらかtrueならtrue
!NOT(否定)trueとfalseを反転

真理値表

AND (&&)

aba && b
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

OR (||)

aba || b
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

NOT (!)

a!a
truefalse
falsetrue

実用例

fn main() {
    let age = 20;
    let has_id = true;

    // 20歳以上 かつ IDを持っている
    let can_enter = age >= 20 && has_id;
    println!("入場可能: {}", can_enter);  // true

    // 65歳以上 または 12歳未満
    let is_discount = age >= 65 || age < 12;
    println!("割引対象: {}", is_discount);  // false
}

複合代入演算子

計算と代入を同時に行います。

fn main() {
    let mut x = 10;

    x += 5;   // x = x + 5 と同じ
    println!("x += 5 → {}", x);  // 15

    x -= 3;   // x = x - 3 と同じ
    println!("x -= 3 → {}", x);  // 12

    x *= 2;   // x = x * 2 と同じ
    println!("x *= 2 → {}", x);  // 24

    x /= 4;   // x = x / 4 と同じ
    println!("x /= 4 → {}", x);  // 6

    x %= 4;   // x = x % 4 と同じ
    println!("x %= 4 → {}", x);  // 2
}
演算子意味
+=足して代入
-=引いて代入
*=掛けて代入
/=割って代入
%=剰余を代入

演算子の優先順位

数学と同じで、掛け算・割り算が足し算・引き算より先に計算されます。

fn main() {
    let result = 2 + 3 * 4;  // 2 + 12 = 14
    println!("{}", result);

    let result = (2 + 3) * 4;  // 5 * 4 = 20
    println!("{}", result);
}

迷ったらカッコを使いましょう。読みやすさも向上します。

まとめ

種類演算子用途
算術+, -, *, /, %数値計算
比較==, !=, >, <, >=, <=値の比較
論理&&, ||, !条件の組み合わせ
複合代入+=, -=, *=, /=, %=計算して代入

確認テスト

Q1. 10 / 3 の結果は?(両方とも整数)

Q2. true && false の結果は?

Q3. 以下のコードの出力は?
let mut x = 5; x += 3; x *= 2; println!("{}", x);

Q4. let a: i32 = 10; let b: f64 = 2.5; let c = a + b; のエラーを修正するには?

Q5. 「18歳以上 かつ 身長150cm以上」を判定する条件式は?


次のドキュメント: 03_control_flow.md