二項演算子は、演算子の左右の値に作用する
let c = a + b;
+, -, *, /, %, &, |, ^, <<, >>
fn main(){ let a = 0b010010; let b = 0b000111; println!("{:08b}", a & b); println!("{:08b}", a | b); println!("{:08b}", a ^ b); }
ビットのシフトは、各ビットを左または右にシフトする
右にシフトすると値が小さくなり、左にシフトすると値が大きくなる
fn main(){ let n = 1; println!("{}", n << 1); println!("{}", n << 2); println!("{}", n << 3); let m = 300; println!("{}", m >> 1); println!("{}", m >> 2); println!("{}", m >> 3); }
単項演算子は右側の値が左側の値に作用する
比較演算子は左右の値の比較
論理演算子は左右の値または右側の値に作業して論理値を返す
代入演算子は右の値を左の変数に代入する
参照と参照外し
&は変数の参照を表す。参照の値に「*」を付けると値そのものを指す
fn main(){ let x:i32 = 456; let r = &x; println!("x={}, r={}, *r={:?}", x, r, *r); }
値の型の出力にはtype_of()を使う
fn main(){ let x:i32 = 456; let r = &x; println!("x={}, type={:?}", x, type_of(x)); println!("r={}, type={:?}", r, type_of(r)); println!("*r={}, type={:?}", *r, type_of(*r)); } fn type_of<T>(_: T) -> &'static str { std::any::type_name::<T>() }
fn main(){ let x:i32 = 456; let ref r = x; println!("x={}, r={}, *r={:?}", x, r, *r); }
fn main(){ let mut x:i32 = 456; let y = &mut x; *y = 123; println!("y={}", y); println!("y={} x={}", y, x); }
Rustのその他の演算子
!, &, *, +, ,, -, -=, ->, ., .., ..=, …, /, /=, :, ;, =, =>, @, |, ?
演算子の結合順序
* / % << >> &
+ – | ^
== != < <= >= >=
&&
||