Namaran

Code daily. Without assist.

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乗される」と読んでしまうと間違えやすい例です。