6.2 算术运算符
算术运算符允许你执行像加法,乘法,除法等等那样的基本操作.
MUGEN拥有下列运算符:
(下面就不翻译原话了,大多数运算符和其他编程中的定义一样,只写出每个运算符通俗含义)
-
+
把两数相加.其他类型与浮点型相加会先把其他类型强制转换成浮点型再相加,结果为浮点型.
-
-
减号.强制类型转换和+号一样.
-
*
乘号.强制类型转换和+号一样.
-
/
除号.强制类型转换和+号一样.需要注意的是整型除以整型结果还是整型,不会出现小数点.也就是说8/3等于2.
示例:10/3=3,12.0/3.0=4.0,20/4.0=5.0.
除以0会产生bottom.
-
%
求余.返回x除以y的余数.只要x或y是浮点型或者y是0就会产生bottom.
(此运算符运用时一定要注意,尤其是注意浮点数用此运算符会错误,而且通过报错信息很难找到错误位置)
-
**
幂运算.如果x,y是非负整数,x**y就是x的y次方.(定义0**0=1)
如果幂运算的时候导致数据太大,就会出现MAX_INT(整数的上限)警告.
如果x,y中有一个是负的或者浮点型,那2个数都会强制转换成浮点型,计算结果是实数.
像-1**0.5这类运算会出bottom(负数不能开根号).
-
!
逻辑运算符 否.x为非0时,!x等于0.x为0时,!x等于1.
(逻辑运算符操作数分为非0和0,非0被看做1处理.返回值为布尔型,也就是true和false.用整数表示:1对应true(真),0对应false(假).)
-
&&
逻辑运算符 且.x,y中只有当x和y都是非0,x&&y才会等于1,否则结果都是0.
-
||
逻辑运算符 或.x,y中只有当x和y都是0,x&&y才会等于0,否则结果都是1.
-
^^
逻辑运算符 异或.x,y中当x和y都是0或都是非0,x&&y才会等于0,否则结果都是1.
(用0,1表示就是说,x,y数值不同时x^^y=1,数值相同时x^^y=0)
-
~
按位取反运算符.位运算符的运算方法是先把整数转换成2进制数,然后运算,再转换成10进制.
取反计算原理是0的地方变1,1的地方变0.10110011取反就是01001100.
如果对浮点数取反就会出bottom.
-
&
按位与运算符.遵循0&1=0,1&1=1,0&0=0.
运算方式同"~".
操作数中出现浮点数会出bottom.
-
|
按位或运算符.遵循0|1=1,1|1=1,0|0=0.
运算方式同"~".
操作数中出现浮点数会出bottom.
-
^
按位异或运算符.遵循0^1=1,0^0=0,1^1=0.
运算方式同"~".
操作数中出现浮点数会出bottom.
-
=
关系运算符 等于.用来比较两个数是否相等.如果两数都是整型或都是浮点型且他们相等,则返回1,否则返回0.
如果有一个数是浮点型,则比较的时候会将非浮点型的数强制转换成浮点型进行比较.
-
:=
赋值 运算符.
例子:
var(4):=1 表示把整型值1赋给var(4).
如果指定var(4):=1.1 则赋值的时候会将1.1转换为整型再赋给var(4)(var(4)的值为1).
如果指定fvar(4):=1 则赋值的时候会将1转换为浮点型再赋给fvar(4)(fvar(4)的值为1.000000).
(注:在MUGEN中":="运算符可以实现在触发条件中直接对var参数赋值.
比如 trigger1 = var(0):=12.3 也就是直接把12.3赋给var(0)使得var(0)为12,然后再判断这个触发条件,也就是trigger1 = 12 ,此触发条件恒成立.
-
!=
关系运算符 不等于.如果x,y类型相同,如果x不等于y,则x != y 返回1,否则返回0.
如果有一个数是浮点型,则比较的时候会将非浮点型的数强制转换成浮点型进行比较.
-
<
关系运算符 小于.如果x小于y,则x<y返回1,否则返回0.处理方式同"!=".
-
<=
关系运算符 小于等于.如果x小于等于y,则x<=y返回1,否则返回0.处理方式同"!=".
-
>
关系运算符 大于.如果x大于y,则x>y返回1,否则返回0.处理方式同"!=".
-
>=
关系运算符 大于等于.如果x大于等于y,则x>=y返回1,否则返回0.处理方式同"!=".
-
=[,] !=[,] =[,) !=[,) =(,] !=(,] =(,) !=(,)
区间运算符.
举例来说,x=[y,z] 表示 x>=y && x<=z .而 x=(y,z) 表示 x>y && x<z .他们的区别就是是否包含边界.x=[y,z) 表示 x>=y && x<z.
所以可以知道x!=[y,z]的含义了.也就是不包含在y和z之间.(x<y || x>z)而 x!=(y,z) 表示 x>=y || x<=z .
运用此运算符特别要注意的就是优先级以及合法性,此运算符的优先级很低,且很多写法都非法,所以在用的时候以防万一还是加上括号.(详见运算符优先级以及表达式语法)