演算子
計算や比較を行うための「演算子」について学びます。
算術演算子
数値の計算に使います。
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 + 3 → 8 |
- | 引き算 | 5 - 3 → 2 |
* | 掛け算 | 5 * 3 → 15 |
/ | 割り算 | 5 / 3 → 1 |
% | 剰余(余り) | 5 % 3 → 2 |
整数の割り算に注意
整数同士の割り算は小数点以下が切り捨てられます:
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 == 5 → true |
!= | 等しくない | 5 != 3 → true |
> | より大きい | 5 > 3 → true |
< | より小さい | 5 < 3 → false |
>= | 以上 | 5 >= 5 → true |
<= | 以下 | 5 <= 3 → false |
=と==の違い
#![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 (&&)
| a | b | a && b |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
OR (||)
| a | b | a || b |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
NOT (!)
| a | !a |
|---|---|
| true | false |
| false | true |
実用例
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 の結果は?(両方とも整数)
正解: B) 整数同士の割り算は小数点以下が切り捨てられます。小数が必要な場合は
10.0 / 3.0 のように浮動小数点数を使います。
Q2. true && false の結果は?
正解: B) AND演算子 (
&&) は両方が true の場合のみ true を返します。片方でも false なら結果は false です。
Q3. 以下のコードの出力は?let mut x = 5; x += 3; x *= 2; println!("{}", x);
正解: C) x=5 → x+=3でx=8 → x*=2でx=16 となります。複合代入演算子は順番に実行されます。
Q4. let a: i32 = 10; let b: f64 = 2.5; let c = a + b; のエラーを修正するには?
正解: A) 異なる型(i32とf64)を直接計算することはできません。
as キーワードで型変換(キャスト)を行います。
Q5. 「18歳以上 かつ 身長150cm以上」を判定する条件式は?
正解: C) 「かつ」はAND演算子
&&、「以上」は >= を使います。両方の条件を同時に満たす必要があります。
次のドキュメント: 03_control_flow.md