什么是运算赋值运算符呢?我们先来看一条语句:
A:=A+B;
这条语句的意思读者已经很清楚了,就是将A+B的值赋予A。对于这类运算,我们可以用另外一条语句替代:
A+=B;
这就叫运算赋值运算符,基本上就是用算符=来替代掉原来的A:=A算符B的功能。
这种算符在C以及类C语言中被广泛支持,但是或许有的读者会有一个疑问,除了获得代码编写上的简便以外,似乎没有其他用处。其实不然,在很多情况下,采用运算赋值运算符还可以获得效率上的提高。
我们拿字符串的加法来做一个例子:
A:="";
For i:=0 to 9999 do
A:=A+"A";
和
A:="";
For i:=0 to 9999 do
A+="A";
这两种写法在计算机的执行上是完全不同的,+=并不仅仅只是写法的简便那么简单。
在执行A:=A+"A"的时候,计算机先取出A的值,然后执行+的操作,也就是需要先分配一个足够的内存空间存贮A+"A"的结果,然后再将A原来存贮的字符串进行释放,释放以后再把计算的字符串结果复制到A。
而执行A+="A"的时候,计算机仅仅只需要先把A的字符串的存贮空间扩大一个字节,然后再把"A"复制进末尾。
简单说起来,就是+=可以利用原有变量的存贮空间,而:=则不行,这样就可以基本保障几乎所有类似的运算采用运算赋值运算符会更快速。这个效率尤其在之后的矩阵计算中会体现得更加明显(由于矩阵的每一次计算的结果集相比标量而言都非常庞大,导致:=会不断地生成新结果集和删除旧结果集,使得效率很低)
运算符 |
算符名称 |
备注 |
+= |
加等于 |
|
-= |
减等于 |
|
*= |
乘等于 |
|
/= |
除等于 |
|
\= |
左除等于 |
|
^= |
幂等于 |
|
~= |
对数等于 |
|
%= |
模等于 |
|
Div= |
整除等于 |
很特殊的算符,字母和符号并用的算符 |
.|= |
位或等于 |
|
.&= |
位与等于 |
|
.||= |
逻辑或等于 |
|
.&&= |
逻辑与等于 |
|
.^= |
位异或等于 |
|
|= |
矩阵右并等于 |
|
:|= |
矩阵右并等于 |
和|=的差异见后续章节中|和:|的差异 |
&= |
矩阵下并等于 |
很特殊的算符,因为&是表达式,所以利用&=来实现union等于的功能 |
:*= |
矩阵乘等于 |
|
:/= |
矩阵除等于 |
|
:\= |
矩阵左除等于 |
|
:^= |
矩阵幂等于 |
|
Union2= |
集合并等于 |
很特殊的算符,字母和符号并用的算符 |
Intersect= |
集合交集等于 |
很特殊的算符,字母和符号并用的算符 |
Outersect= |
集合对称差集= |
很特殊的算符,字母和符号并用的算符 |
Minus= |
集合补集等于 |
很特殊的算符,字母和符号并用的算符 |