网站外链内链怎么做,企业网站是企业在互联网上进行网络营销,第一简历模板网,优化关键词排名seo软件【图书介绍】《Rust编程与项目实战》-CSDN博客
《Rust编程与项目实战》(朱文伟#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com)
https://blog.csdn.net/brucexia/category_12779443.html
前面已经学习了变量和常量#xff0c;本节开始对它们进行操作#xff0c…【图书介绍】《Rust编程与项目实战》-CSDN博客
《Rust编程与项目实战》(朱文伟李建英)【摘要 书评 试读】- 京东图书 (jd.com)
https://blog.csdn.net/brucexia/category_12779443.html
前面已经学习了变量和常量本节开始对它们进行操作这就要用到Rust的操作符Operator。操作符通常是由一个或多个特殊的符号组成的也有非特殊符号的操作符如as比如、−、*、/、%、、*等。每个操作符都代表一种动作或操作这种动作作用于操作数之上。简单来说就是对操作数执行某种操作然后返回操作后得到的结果。比如加法操作3 2这里的是操作符加号两边的3和2是操作数加法符号的作用是对操作数3加上操作数2得到计算结果5并返回5。
有些语言很多操作符都是关键字比如add、equals等。Rust的操作符主要是由符号组成的比如、−等。这些符号不在字母表中但是在所有键盘上都可以找到。这个特点使得Rust程序更简洁也更国际化。运算符也称操作符。运算符是Rust语言的基础所以非常重要。
4.1.1 赋值运算符
赋值运算符的功能是将一个值赋给一个变量。比如
a 5;
以上代码将整数5赋给变量a。 运算符左边的部分叫作左值lvalueleft value右边的部分叫作右值rvalueright value。左值必须是一个变量而右值可以是一个常量、一个变量、一个运算的结果或者是前面几项的任意组合。
有必要强调赋值运算符永远是将右边的值赋给左边不会反过来。比如
a b;
以上代码将变量b的值赋给变量a不论赋值前a存储的是什么值这行代码执行后a的值就和b的值一样了。但要注意我们只是将b的值赋给a以后如果b的值改变了并不会影响a的值。下面来看实例。 【例4.1】 赋值运算符的使用 在命令行下用命令cargo new myrust新建一个Rust项目项目名是myrust。 打开VS Code再打开文件夹myrust然后在VS Code中打开src下的main.rs输入如下 代码
fn main() {let mut a:i32;let mut b:i32; //此时a、b的值未知a 10; // a:10b未知b 4; // a:10b:4a b; // a:4b:4b 7; // a:4b:7println!({},{},a,b);}
以上代码的结果是a的值为4b的值为7。最后一行中b的值被改变并不会影响a虽然在此之前我们声明了a b;从右到左规则right-to-left rule。 运行结果如下
4,7 4.1.2 数学运算符
Rust语言支持5种数学运算符分别为加、减−、乘*、除/、取模%括号里的符号就是数学运算符号。加减乘除运算想必大家都很了解它们和一般的数学运算符没有区别。
唯一你可能不太熟悉的是用百分号%表示的取模运算Module。取模运算是取两个整数相除的余数。例如如果我们写a 11 % 3;变量a的值将会为2因为2是11除以3的余数。比如
fn main() {let mut a:i32;let mut b:i32;let mut c:i32; a 11 % 3; // 取模运算得a为2b 4a; //加法运算得b为6c (ab)/2; //除法运算得c为4 println!({},{},{},a,b,c);}
输出结果
2,6,4
4.1.3 组合运算符
Rust以书写简练著称其一大特色就是这些组合运算符、−、*、/及其他这些运算符使得只用一个基本运算符就可以改写变量的值
value increase; 等同于 value value increase;
比如
a − 5; 等同于 a a − 5;。a / b; 等同于 a a / b;。price * units 1; 等同于price price * (units 1);。
其他运算符以此类推。下面来看一个组合运算符的例子代码如下
fn main() {let mut a:i32;let mut b:i32;let mut c:i32; a 11 % 3; // a:2b 4a; // b:6c (ab)/2; //c:3 ac; b*a;c/2; println!({},{},{},a,b,c);}
结果输出
6,6,4
值得庆幸的是Rust 语言不支持自增运算符和自减运算符--因此本节绝对不会出现类似于ai这样让人血压升高的语句。其实编程语言由于是给人用的一定要考虑到人的局限性就是面对复杂事物容易出错所以编程语言一定要简单明了Rust去掉了和--相对于C语言而言绝对是个进步可以从源头上尽可能防止人类出错。
4.1.4 关系运算符
我们用关系运算符来比较两个表达式关系运算的结果是一个布尔值即它的值只能是true或false。例如我们想通过比较两个表达式来看它们是否相等或一个值是否比另一个值大。表4-1所示为Rust的关系运算符。 示例代码如下
fn main() {let mut a:bool;let mut b:bool;let mut c:bool;a(7!5);b (10099);c(66);println!({},{},{},a,b,c);}
运行结果true,false,true。
除使用数字常量外我们也可以使用任何有效表达式包括变量。比如下列代码
fn main() {let mut a:i32;let mut b:i32;let mut c:i32;a2;b3;c6;println!({},{},{},(a 5),(a*b c),(b4 a*c));}
输出结果false,true,false。(a*b c)返回true是因为它实际是(2*3 6)(b4 a*c)返回false因为它实际是(34 2*6)。
值得注意的是运算符单个等号不同于运算符两个等号前者是赋值运算符将等号右边的表达式值赋给左边的变量后者是一个判断等于的关系运算符用来判断运算符两边的表达式是否相等。
4.1.5 逻辑运算符
运算符!等同于boolean运算NOT取非它只有一个操作数Operand写在它的右边。它做的唯一工作就是取该操作数的反面值也就是说如果操作数值为真true那么运算后值变为假false如果操作数值为假false则运算结果为真true。它就好像是取与操作数相反的值。例如
!(5 5)返回false因为它右边的表达式5 5为真true。!(6 4)返回true因为6 4为假false。!true返回假false。!false返回真true。
大家如果不信可以用下列代码直接输出看看结果
println!({},{},{},{},!(5 5),!(6 4),!true,!false);
逻辑运算符和||用来计算两个表达式而获得一个结果值。它们分别对应逻辑运算中的与运算AND和或运算OR。它们的运算结果取决于两个操作数的关系如表4-2所示。 例如
( (5 5) (3 6) )返回false ( true false )。( (5 5) || (3 6))返回true ( true || false )。
大家如果不信可以用下列代码直接输出看看结果
println!({},{},( (5 5) (3 6) ) ,( (5 5) || (3 6)));
4.1.6 位运算符
位运算符以比特位改写变量存储的数值也就是改写变量值的二进制表示。Rust的位运算符如表4-3所示。 下面的范例演示上面提到的所有位运算符。
fn main() {let a:i32 2; // 二进制表示为 0 0 0 0 0 0 1 0let b:i32 3; // 二进制表示为 0 0 0 0 0 0 1 1let mut result:i32;result a b;println!((a b) {} ,result);result a | b;println!((a | b) {} ,result) ;result a ^ b;println!((a ^ b) {} ,result);result !b;println!((!b) {} ,result);result a b;println!((a b) {},result);result a b;println!((a b) {},result);}
输出结果如下
(a b) 2(a | b) 3(a ^ b) 1(!b) -4(a b) 16(a b) 0
4.1.7 变量类型转换运算符
变量类型转换运算符可以将一种类型的数据转换为另一种类型的数据。在Rust中可以使用关键字as进行类型转换as 运算符有点像C中的强制类型转换区别在于它只能用于原始类型i32、i64、f32、f64、u8、u32、char等类型并且它是安全的。注意不同的数值类型是不能进行隐式转换的。比如
let b: i64 iNum; //iNum是一个i32类型的变量
会出现编译错误提示无法进行类型转换。这时可以使用as 进行转换比如
fn main() {let mut iNum:i32; let mut b:i64; iNum100;b iNum as i64;print!({},b);}
输出结果100。
为什么as是安全的尝试以下代码
b iNum as char;
编译器报错
error[E0604]: only u8 can be cast as char, not i32
可见在不相关的类型之间Rust 会拒绝转换这样避免了运行时错误。
4.1.8 运算符的优先级
当多个操作数组成复杂的表达式时我们可能会疑惑哪个运算先被计算哪个后被计算。例如以下表达式
a 5 7 % 2
我们可以怀疑它实际上表示a 5 (7 % 2) 结果为6还是 a (5 7) % 2 结果为0?
正确答案为第一个结果为6。每一个运算符都有一个固定的优先级不仅是数学运算符我们可能在学习数学的时候已经很了解它们的优先顺序了所有在Rust中出现的运算符都有优先级。从最高级到最低级运算符的优先级按表4-4排列。 以下是简单的示例
fn main() {//二元计算操作println!(1 2 {}, 1u32 2);println!(1 - 2 {}, 1i32 - 2);//逻辑操作println!(true AND false is {}, true false);println!(true OR false is {}, true || false);println!(NOT true is {}, !true);//位运算操作println!(0011 AND 0101 is {:04b}, 0b0011u32 0b0101);println!(0011 OR 0101 is {:04b}, 0b0011u32 | 0b0101);println!(0011 XOR 0101 is {:04b}, 0b0011u32 ^ 0b0101);println!(1 5 is {}, 1u32 5);println!(0x80 2 is 0x{:x}, 0x80u32 2);}
运行结果如下
1 2 31 - 2 -1true AND false is falsetrue OR false is trueNOT true is false0011 AND 0101 is 00010011 OR 0101 is 01110011 XOR 0101 is 01101 5 is 320x80 2 is 0x20
所有这些运算符的优先级顺序可以通过使用一对圆括号“”来控制而且更易读懂示例如下
a 5 7 % 2;
根据我们想要实现的计算不同可以写成
a 5 (7 % 2);
效果和a 5 7 % 2;一样因为%的优先级比高所以加不加括号没什么区别。如果要先计算57则可以这样
a (5 7) % 2;
此时最终计算结果就不同了。所以如果想写一个复杂的表达式而不敢肯定各个运算的执行顺序那么就加上括号。这样可以使代码更易读懂。 文章转载自: http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn http://www.morning.brfxt.cn.gov.cn.brfxt.cn http://www.morning.gypcr.cn.gov.cn.gypcr.cn http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn http://www.morning.xdttq.cn.gov.cn.xdttq.cn http://www.morning.pwfwk.cn.gov.cn.pwfwk.cn http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn http://www.morning.qhkx.cn.gov.cn.qhkx.cn http://www.morning.dpppx.cn.gov.cn.dpppx.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.crrjg.cn.gov.cn.crrjg.cn http://www.morning.ckhpg.cn.gov.cn.ckhpg.cn http://www.morning.mhbcy.cn.gov.cn.mhbcy.cn http://www.morning.qgtbx.cn.gov.cn.qgtbx.cn http://www.morning.sfnjr.cn.gov.cn.sfnjr.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn http://www.morning.splcc.cn.gov.cn.splcc.cn http://www.morning.gblrn.cn.gov.cn.gblrn.cn http://www.morning.bqfpm.cn.gov.cn.bqfpm.cn http://www.morning.rtsx.cn.gov.cn.rtsx.cn http://www.morning.wgkz.cn.gov.cn.wgkz.cn http://www.morning.dnhdp.cn.gov.cn.dnhdp.cn http://www.morning.ntffl.cn.gov.cn.ntffl.cn http://www.morning.rnyhx.cn.gov.cn.rnyhx.cn http://www.morning.lkkgq.cn.gov.cn.lkkgq.cn http://www.morning.qkrgk.cn.gov.cn.qkrgk.cn http://www.morning.tralution.cn.gov.cn.tralution.cn http://www.morning.qscsy.cn.gov.cn.qscsy.cn http://www.morning.rkrl.cn.gov.cn.rkrl.cn http://www.morning.qfmns.cn.gov.cn.qfmns.cn http://www.morning.gpnwq.cn.gov.cn.gpnwq.cn http://www.morning.qztsq.cn.gov.cn.qztsq.cn http://www.morning.nrcbx.cn.gov.cn.nrcbx.cn http://www.morning.hlhqs.cn.gov.cn.hlhqs.cn http://www.morning.qglqb.cn.gov.cn.qglqb.cn http://www.morning.zwfgh.cn.gov.cn.zwfgh.cn http://www.morning.zryf.cn.gov.cn.zryf.cn http://www.morning.pccqr.cn.gov.cn.pccqr.cn http://www.morning.hjrjr.cn.gov.cn.hjrjr.cn http://www.morning.tbzcl.cn.gov.cn.tbzcl.cn http://www.morning.glnmm.cn.gov.cn.glnmm.cn http://www.morning.mlbn.cn.gov.cn.mlbn.cn http://www.morning.smpb.cn.gov.cn.smpb.cn http://www.morning.tnhg.cn.gov.cn.tnhg.cn http://www.morning.xfxlr.cn.gov.cn.xfxlr.cn http://www.morning.qkqzm.cn.gov.cn.qkqzm.cn http://www.morning.txrq.cn.gov.cn.txrq.cn http://www.morning.jzfxk.cn.gov.cn.jzfxk.cn http://www.morning.smzr.cn.gov.cn.smzr.cn http://www.morning.lmbm.cn.gov.cn.lmbm.cn http://www.morning.rxhn.cn.gov.cn.rxhn.cn http://www.morning.hjwzpt.com.gov.cn.hjwzpt.com http://www.morning.kxqpm.cn.gov.cn.kxqpm.cn http://www.morning.brscd.cn.gov.cn.brscd.cn http://www.morning.lxfqc.cn.gov.cn.lxfqc.cn http://www.morning.rtsdz.cn.gov.cn.rtsdz.cn http://www.morning.rywn.cn.gov.cn.rywn.cn http://www.morning.hqpyt.cn.gov.cn.hqpyt.cn http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn http://www.morning.zhqfn.cn.gov.cn.zhqfn.cn http://www.morning.ymfzd.cn.gov.cn.ymfzd.cn http://www.morning.qdlnw.cn.gov.cn.qdlnw.cn http://www.morning.znkls.cn.gov.cn.znkls.cn http://www.morning.hghhy.cn.gov.cn.hghhy.cn http://www.morning.llxyf.cn.gov.cn.llxyf.cn http://www.morning.gwsdt.cn.gov.cn.gwsdt.cn http://www.morning.qtzk.cn.gov.cn.qtzk.cn http://www.morning.kpwcx.cn.gov.cn.kpwcx.cn http://www.morning.ycgrl.cn.gov.cn.ycgrl.cn http://www.morning.qlbmc.cn.gov.cn.qlbmc.cn http://www.morning.shuanga.com.cn.gov.cn.shuanga.com.cn http://www.morning.rqrh.cn.gov.cn.rqrh.cn http://www.morning.snnb.cn.gov.cn.snnb.cn http://www.morning.tbbxn.cn.gov.cn.tbbxn.cn http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn http://www.morning.kdjtt.cn.gov.cn.kdjtt.cn http://www.morning.sgrdp.cn.gov.cn.sgrdp.cn http://www.morning.lnmby.cn.gov.cn.lnmby.cn