// dictionary
数値演算.
Rustの数値型は、加算・減算・乗算・除算・剰余の5種類の基本演算をサポートしています。
整数型と浮動小数点型のどちらでも使えますが、異なる型同士をそのまま演算することはできず、asによるキャストなどで型を揃える必要があります。
| 演算子 | 意味 | 例 |
|---|---|---|
+ |
加算 | 5 + 3 → 8 |
- |
減算 | 5 - 3 → 2 |
* |
乗算 | 5 * 3 → 15 |
/ |
除算 | 7 / 2 → 3(整数は切り捨て) |
% |
剰余 | 7 % 2 → 1 |
fn main() {
let budget = 500; // 予算(円)
let price = 120; // りんご1個の値段(円)
let count = budget / price; // 買える個数(4.16… → 4に切り捨て)
let change = budget % price; // 余るお金
println!("{}円で{}個買えて、{}円余ります", budget, count, change);
}Playgroundで開く整数演算の注意点
- 除算
/は0方向への切り捨てです(-7 / 2は-3) - 剰余
%の結果の符号は左辺(被除数)と同じになります(-7 % 2は-1)
補足
パニックやエラーになる整数演算
- 0による除算・剰余は、リリースビルドでも実行時にパニックします(符号付き整数の
MIN / -1も、結果が表現できないため同様にパニックします) - 符号なし整数には単項マイナス
-を適用できません(エラー: E0600) - 加減乗算のオーバーフロー時の挙動は、整数型のページの補足「オーバーフロー時の挙動」を参照してください
異なる型同士の演算はエラー
整数リテラル同士なら型推論で揃いますが、型が確定した変数同士は暗黙に変換されません。ビット幅が違うだけでもエラーになります。
fn main() {
let count: i32 = 3;
let total: i64 = 1000;
println!("{}", total + count); // エラー: E0277(i64にi32を加算できない)
}Playgroundで開くtotal + count as i64 のようにキャストで型を揃えると演算できます。
複合代入演算子
5種類の演算すべてに、演算と代入を同時に行う複合代入演算子があります(+= -= *= /= %=)。count = count + 1 は count += 1 と書けます。なお、Rustには ++ / --(インクリメント・デクリメント演算子)はありません。
演算子に対応するトレイト
各演算子は std::ops のトレイト(+ は Add、- は Sub、* は Mul、/ は Div、% は Rem)に対応しています。これらのトレイトを実装すれば、独自の型にも演算子を使えるようになります。
この辞書が使われているページ
backlinks 3