首页 果壳精灵教程 当前文章

【新手入门】第 6 讲:运算符和表达式

xLeaves(xxrpa) 发布于 2022年05月27日 13:54:54


计算机被研究出来的目的是计算,编程语言被研究出来的目的是更方便更简单的用计算机计算。

计算是计算机这个仿生人类自己的工具的最终目的,我们写程序,也是为了计算。

不管是写图色脚本,还是小小工具,或者是一个系统化的大工程,其本质都是针对数据的计算。

在上一节课,我们已经把数据解构出来了,我们在计算机中处理的数据,本质上就是数学与文字,我们心在知道了应该怎么表示数据,接下来就是如何计算数据了。


什么是运算符:

小学学习数学的时候,加减乘除都会写吧?在编程里也是一样的写法,比如说 1 + 1,得到的结果就是 2。

已知 Delay 命令的功能是等待一会继续运行,等待的单位是毫秒,1 秒等于 1000 毫秒,因此 Delay(1000) 是等待 1 秒,那么 Delay(1000 + 1000) 是多久呢?

我们可以写一个简单的例程验证下:

TracePrint "两秒后显示下一条日志 ..."
Delay(1000 + 1000)
TracePrint "2 秒时间过去了,程序执行完毕!"

这里我们使用的 + 符号,就是运算符,它的作用就是把出现在两边的数字加起来,除了加法运算之外,果壳精灵也支持许多其他的运算符。

继续往下看吧,一会我们会把所有运算符全都盘点一遍的。


什么是表达式:

1000 + 1000,这就是一个简单的表达式,说白了,就是数据和运算符组合起来,就是一个表达式。

有返回值的函数可以当做一个数据使用,表达式当然也可以当做一个数据来使用,例如 1000 + 1000 就相当于 2000。

那么 1000 + 2000,是不是就相当于 1000 + (1000 + 1000) 呢?

能够计算出结果的表达式,和一个单纯的数据之间,是没有任何区别的,包括带返回值的函数也好,其实到头来,都是代入数据进行的计算。

就像我们初中数学课上学习到的知识一样,本质上,就是数据的代入,最终得到正确的结果。

理解了这一点,未来我们在调试程序的时候,就不会因为一些莫名的原因而感到头大,例如为什么 1 可以加上一个命令?

因为 1 加的从来都不是命令,而是这个命令执行的返回值,这个返回值是多少?你去把命令和参数都还原了单独运行一遍不就知道了?

知道了正确的返回值,再把返回值代入计算一下,自然就知道正确的结果是什么了,分辨结果的对错,也就知道知道代码的问题出在哪里了。

一切就是这么简单,所以我不得不重复一遍这句话:大道至简。往往最简单的东西,蕴含最大的真理。

学习编程,基本功比那些花哨的技巧有用的多,看到代码,大脑能够自动解算每一个数值的值是多少,再根据算法一步一步提前计算出正确的结果,和电脑得出的结果做对比,双向验证,这样的能力才是最厉害的。


数学运算符:
数学运算符是针对两个数字进行计算的运算符,两个数字计算后得到的结果,也必定是一个数字。

+:加法计算,a + b 就是计算 a 和 b 的相加的和。

-:减法计算,a - b 就是计算 a 减去 b 的差值。

*:乘法计算,a * b 就是计算 a 乘以 b 的乘积。

/:除法计算,a / b 就是计算 a 除以 b 的商,这个运算符总是得到一个浮点数的数据。

\:除法计算,a \ b 就是计算 a 除以 b 的商,这个运算符总是得到一个整数数据,舍弃掉小数结果。

^:求幂计算,a ^ 3 就是计算 a 的三次幂(a * a * a),a ^ 2 就是计算 a 的二次幂(a * a)。


逻辑运算符:
逻辑运算符是结果返回逻辑数据类型的运算符,两个数据运算后,得到的结果必定是一个逻辑值 true(成立)或 false(不成立)。

=:判断两个表达式是否相等,例如 1 + 1 = 1。

>:判断表达式 a 是否大于表达式 b:a > b。

<:判断表达式 a 是否小于表达式 b:a < b。

>=:判断表达式 a 是否大于或等于表达式 b:a >= b。

<=:判断表达式 a 是否小于或等于表达式 b:a <= b。

<>:判断两个表达式是否不相等,例如 1 + 1 <> 2。

And:与判断,与就是并且的意思,例如 a and b,就是 a 为 true,并且 b 也为 true,才会得到 true,否则得到 false。

Or:或判断,或就是或者的意思,例如 a or b,就是 a 或者 b 有一个为 true 的情况下,就能得到 true,都为 false 的情况下才能得到 false。

Not:非判断,当运算对象为 true 时得到 false,当运算对象为 false 时得到 true,Not 运算符不需要左侧值,只有右侧值,例如:not true。

All:判断所有条件是否全部成立,所有条件都成立的情况下返回 true,否则返回 false,All 实际上是一个函数,例如:All(1+1=2, 2+2=4, 4+4=8)。

Some:判断所有条件是否至少有一个是成立的,只有有一个条件成立就返回 true,否则返回 false,Some 也是一个函数,用法与 All 类似。


字符串运算符:
针对字符串的运算符,其中 + 运算符和数学运算符是重合的,当 + 运算符的结果或值有一个是字符串类型的,则返回值也是字符串。

&:字符串拼接,将两个字符串连接起来,例如:"1" + "2" 会得到 "12"。

+:字符串拼接,因为具备二义性,不推荐使用,应该用 & 代替;再进行数学计算时,应该确保所有值都是数字,而不是字符串,否则就相当于字符串拼接了。


位运算符:
位运算全称是二进制位运算,二进制每一位数字只能是 0 或者 1,可以作为一组逻辑运算,1 当做 true,0 当做 false。例如 101 和 010 进行位运算,就是第一个数字的 1 和第二个数字的 0 进行逻辑运算,然后第二位的 0 和 1 进行逻辑运算……最后再将所有位的运算结果重新构造成一个新的数字,例如 AndB 运算后的结果就是 &B000,OrB 运算后的结果就是 &B111。

>>:右移位,将二进制位向右侧移动 n 位:&b1100 >> 2 = &b11

<<:左移位,将二进制位向左侧移动 n 位:&b1100 << 2 = &b110000

AndB:位与运算,同位置两位都为 1 时得到 1,否则得到 0。

OrB:位或运算,同位置两位有一个是 1 就能得到 1,否则得到 0。

NotB:将位数据翻转,NotB &b0011 = &b1100。

Xor:位异或运算,同位置两位的值不同会得到 1,相同会得到 0。


若无特殊声明,上述内容为本站原创,未经授权禁止转载!