2026-09-19
neg_pow.rs
fn main() {
let x = -1i32.pow(2);
println!("{x}");
}
-1i32.pow(2)は(-1i32).pow(2)、つまり1になるでしょうか?実際に何が出力されるか答えてください。
Answer
-1(その後に改行)。単項の-は前置演算子ですが、メソッド呼び出し(.pow(2)のようなドット記法)は後置演算子で、Rustの演算子優先順位では後置の方が前置より強く結合します。そのため-1i32.pow(2)は-(1i32.pow(2))、つまり「1i32の2乗を求めてから符号を反転する」という意味になり、1の2乗である1を反転した-1が答えです。(-1i32).pow(2)のように-1を先に確定させたいなら、括弧で明示的に区切る必要があります。数式の見た目につられて「マイナスが先に付いているものは全部まとめて2乗される」と読んでしまうと間違えやすい例です。