3运算符号
本章介绍操作符如何与其他语言元素一起使用以在KAREL应用程序中执行操作。 首先解释表
达式和赋值,它们是包含运算符和操作数的程序语句。 接下来,讨论可以使用每个可用的
KAREL算子执行的操作种类
3.1 表达式和赋值
以下规则适用于表达式和赋值:
• 表达式的每个操作数都有一个由操作符的性质决定的数据类型。
• 每个 KAREL 操作符都需要一个特定的操作数类型,并导致产生特定结果类型的计算。
• 表达式中的两个操作数必须具有相同的数据类型。 例如,AND运算符要求它的两个操作
数都是 INTEGER 值或两者都是BOOLEAN值。 表达式 i AND b,其中 i 是 INTEGER,b
是 BOOLEAN,是无效的。
• 可以混合操作数的五种特殊情况为此规则提供了一个例外。 这五种情况包括以下内容:
- INTEGER 和 REAL 操作数产生一个 REAL 结果
- INTEGER 和 REAL 操作数产生 BOOLEAN 结果
- INTEGER 和 VECTOR 操作数产生一个 VECTOR
- REAL 和 VECTOR 操作数生成一个 VECTOR
- POSITION 和 VECTOR 操作数生成一个 VECTOR
• 任何位置数据类型都可以替代 POSITION 数据类型。
贴一张手册的图大家看一下就行,基本规则就是小到大转换
**Mixed混合意味着每种类型的一个操作数
***只能使用= <>来比较VECTOR值 - 不允许操作
I →INTEGER;R →REAL;B →BOOLEAN;V →VECTOR;P →POSITION
3.2 运算
运算符优先级
3.2.1 算术运算
PROGRAM TEST05
VAR
a,b:INTEGER
BEGIN
a = 1;
b = 2;
WRITE('a+b=',a+b,CR,
'a-b=',a-b,CR,
'a*b=',a*b,CR,
'a/b=',a/b,CR,
'a DIV b=',a DIV b,CR, --取整
'a MOD b=',a MOD b,CR) --取余
END TEST05
运行结果
- 如果 DIV 运算符不是整数,则 DIV 运算符会截断方程的结果。
- MOD 运算符返回由除以得到的等式的余数左侧运算数由右侧运算数组成。
- 如果 MOD 方程的右侧运算数为负数,则结果也为负。
- 如果 DIV 方程中的除数或 MOD 方程的右侧运算数为零,则 KAREL 程序被“零
除”错误中止。
3.2.2 关系运算 (<>,=,>,<,<=,> =)
我觉得也可以叫做比较运算符这个说起大家都知道就不演示了,他有一下几个规则,这几个规则还是牢记一下免得用的时候达不到自己效果,找不到原因的时候可以往这个方面考虑一下:
1.关系运算符在关系表达式中,两个运算数必须是相同的简单数据类型(BOOLEAN,INTEGER,REAL,FILE,STRING)
这个规则有两个例外:
1.是INTEGER 运算数转换为 REAL 编号时,REAL 和 INTEGER 表达式可以混合使用。
• 例如,在表达式 1> .56 中,数字 1 被转换为 1.0,结果为 TRUE。
2.是VECTOR 运算数是结构化数据类型,可以在关系表达式中进行比较,但只能使用等式(=)或不等式(<>)运算符进行比较。
2.REAL值之间的等式(=)或不等式(<>)
在学习C的时候肯定都遇到过两个浮点型的小数看起来相等但是运算结果却不相等,在这也是一样但是我没遇到过,下面是手册中解决的办法
由于REAL值被存储和操作的方式,看起来相等的两个值可能不完全相等。 对于由 REAL 值组成的
VECTOR值也是如此。 使用 > = 或 <= 在合适的地方代替 =
3.string的比较操作
字符串的比是按字符从左到右逐字比较 STRING 值,因此字符比较是比较各自的ASCII码的大小
列如:A 的ASCII码为 65,a 为 97. 因此,a> A = TRUE
同样string长度小的小于长的
列如:‘dingyark’> ‘dd’ = TRUE
4.BOOLEAN 操作数
对于 BOOLEAN 操作数,TRUE> FALSE 被定义为一个真正的语句。 因此表达式 FALSE> =
TRUE 是一个错误的陈述。 语句 FALSE> = FALSE 和 TRUE> = FALSE 也是真实的语句。
3.2.3 布尔运算符 AND,OR 和 NOT
1.就是与,或,非 这个就没啥好说的
b1 = TRUE
b2 = FALSE
b1 and b2 = False
b1 or b2 = TRUE
NOT b1 = FALSE
NOT b2 = TRUE
2.布尔运算符对于INTEGER的操作
PROGRAM TEST05
CONST
A=-15
BEGIN
WRITE(CHR(128),CHR(137))
WRITE('5 AND 8=',5 AND 8,CR)
WRITE('5 OR 8=',5 OR 8,CR)
WRITE('-4 AND 8=',-4 AND 8,CR)
WRITE('-4 OR 8=',-4 OR 8,CR)
WRITE('NOT 5=',NOT 5,CR)
WRITE('NOT -15=',NOT A,CR)
END TEST05
运行结果
就是转换成对应的ASCII码然后进行位操作,我贴一张手册的图方便大家理解