二項演算子は、演算子の左右の値に作用する
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のその他の演算子
!, &, *, +, ,, -, -=, ->, ., .., ..=, …, /, /=, :, ;, =, =>, @, |, ?
演算子の結合順序
* / % << >> &
+ – | ^
== != < <= >= >=
&&
||