05.运算符
<h1>05.运算符</h1>
<h2>1、算术运算符 +-*/%</h2>
<pre><code>fn main() {
// 加法
let sum = 5 + 10;
// 减法
let difference = 95.5 - 4.3;
// 乘法
let product = 4 * 30;
// 除法
let quotient = 56.7 / 32.2;
// 求余
let remainder = 43 % 5;
}</code></pre>
<p>综合案例:
1、自动推导类型
2、可以通过后缀方式标注:22是i32类型
3、只有同样类型,才能运算
4、对于较长的数字,可以用下划线进行分割,提升可读性
5、数组中定义一个f32类型,其他浮点数也会被自动推导为f32类型
6、打印数组中第一个值,并控制小数位为2位</p>
<pre><code>fn main() {
// 编译器会进行自动推导,给予twenty i32的类型
let twenty = 20;
// 类型标注
let twenty_one: i32 = 21;
// 通过类型后缀的方式进行类型标注:22是i32类型
let twenty_two = 22i32;
// 只有同样类型,才能运算
let addition = twenty + twenty_one + twenty_two;
println!(&quot;{} + {} + {} = {}&quot;, twenty, twenty_one, twenty_two, addition);
// 对于较长的数字,可以用_进行分割,提升可读性
let one_million: i64 = 1_000_000;
println!(&quot;{}&quot;, one_million.pow(2));
// 数组中定义一个f32类型,其他浮点数也会被自动推导为f32类型
let forty_twos = [
42.0,
42f32,
42.0_f32,
];
// 打印数组中第一个值,并控制小数位为2位
println!(&quot;{:.2}&quot;, forty_twos[0]);
}</code></pre>
<h2>2、位运算符&|^!<<>></h2>
<pre><code>运算符 说明
&amp; 位与 相同位置均为1时则为1,否则为0
| 位或 相同位置只要有1时则为1,否则为0
^ 异或 相同位置不相同则为1,相同则为0
! 位非 把位中的0和1相互取反,即0置为1,1置为0
&lt;&lt; 左移 所有位向左移动指定位数,右位补0
&gt;&gt; 右移 所有位向右移动指定位数,带符号移动(正数补0,负数补1)</code></pre>
<p>综合使用</p>
<pre><code>fn main() {
// 无符号8位整数,二进制为00000010
let a: u8 = 2; // 也可以写 let a: u8 = 0b_0000_0010;
// 二进制为00000011
let b: u8 = 3;
// {:08b}:左高右低输出二进制01,不足8位则高位补0
println!(&quot;a value is {:08b}&quot;, a);
println!(&quot;b value is {:08b}&quot;, b);
println!(&quot;(a &amp; b) value is {:08b}&quot;, a &amp; b);
println!(&quot;(a | b) value is {:08b}&quot;, a | b);
println!(&quot;(a ^ b) value is {:08b}&quot;, a ^ b);
println!(&quot;(!b) value is {:08b}&quot;, !b);
println!(&quot;(a &lt;&lt; b) value is {:08b}&quot;, a &lt;&lt; b);
println!(&quot;(a &gt;&gt; b) value is {:08b}&quot;, a &gt;&gt; b);
let mut a = a;
// 注意这些计算符除了!之外都可以加上=进行赋值 (因为!=要用来判断不等于)
a &lt;&lt;= b;
println!(&quot;(a &lt;&lt; b) value is {:08b}&quot;, a);
}</code></pre>