Pascal 运算符
-
运算符
运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。Pascal允许以下类型的运算符-- 算术运算符
- 关系运算符
- 布尔运算符
- 位运算符
- 集合运算符
- 字符串运算符
让我们一一讨论算术,关系,布尔和位运算符。稍后我们将讨论集合运算符和字符串运算。 -
算术运算符
下表显示了Pascal语言支持的所有算术运算符。假设变量A持有10,变量B持有20,则-操作符 描述 例子 + 加两个操作数 A + B等于30 - 从第一个减去第二个操作数 A - B 等于 -10 * 将两个操作数相乘 A * B等于200 / 分子除以分母。 B / A等于2 % 模运算符;给出整数除法后的余数。 B%A给出0 ++ 增量运算符。它将整数值增加一。 A++等于11 -- 递减运算符。它将整数值减一。 A--等于9 示例::
尝试一下program calculator; var a,b,c : integer; d: real; begin a:=21; b:=10; c := a + b; writeln(' Line 1 - Value of c is ', c ); c := a - b; writeln('Line 2 - Value of c is ', c ); c := a * b; writeln('Line 3 - Value of c is ', c ); d := a / b; writeln('Line 4 - Value of d is ', d:3:2 ); c := a mod b; writeln('Line 5 - Value of c is ' , c ); c := a div b; writeln('Line 6 - Value of c is ', c ); end.
-
关系运算符
下表显示了Pascal支持的所有关系运算符。假设变量A持有10,变量B持有20,则-操作符 描述 例子 = 它检查两个操作数的值是否相等。如果是,则条件成立。 (A = B)为假。 <> 它检查两个操作数的值是否相等。如果值不相等,则条件为真。 (A <> B)为真。 > 它检查左操作数的值是否大于右操作数的值;如果是,则条件成立。 (A> B)为假。 < 它检查左操作数的值是否小于右操作数的值;如果是,则条件成立。 (A < B)为真。 >= 它检查左操作数的值是否大于或等于右操作数的值;如果是,则条件成立。 (A> = B)为假。 <= 它检查左操作数的值是否小于或等于右操作数的值;如果是,则条件成立。 (A <= B)为真。 示例::
尝试一下program showRelations; var a, b: integer; begin a := 21; b := 10; if a = b then writeln('Line 1 - a is equal to b' ) else writeln('Line 1 - a is not equal to b' ); if a < b then writeln('Line 2 - a is less than b' ) else writeln('Line 2 - a is not less than b' ); if a > b then writeln('Line 3 - a is greater than b' ) else writeln('Line 3 - a is greater than b' ); (* Lets change value of a and b *) a := 5; b := 20; if a <= b then writeln('Line 4 - a is either less than or equal to b' ); if ( b >= a ) then writeln('Line 5 - b is either greater than or equal to ' ); end.
-
布尔运算符
下表显示了Pascal语言支持的所有布尔运算符。所有这些运算符都对布尔操作数起作用并产生布尔结果。假设变量A为真,变量B为假,则-操作符 描述 例子 and 称为布尔AND运算符。 如果两个操作数都为真,则条件为真。 (A and B) 为 false. and then 它与AND运算符相似,但是,它保证了编译器计算逻辑表达式的顺序。 仅在必要时才计算从左到右和右操作数。 (A and then B) 为 false. or 称为布尔或运算符。 如果两个操作数中的任何一个为true,则条件为true。 (A or B) 为 true. or else 它与布尔OR相似,但是,它保证编译器评估逻辑表达式的顺序。 仅在必要时才计算从左到右和右操作数。 (A or else B) 为 true. not 称为布尔NOT运算符。 用于反转其操作数的逻辑状态。 如果条件为真,则逻辑非运算符会将其设置为假。 not (A and B) 为 true. 示例::
尝试一下program beLogical; var a, b: boolean; begin a := true; b := false; if (a and b) then writeln('Line 1 - Condition is true' ) else writeln('Line 1 - Condition is not true'); if (a or b) then writeln('Line 2 - Condition is true' ); (* lets change the value of a and b *) a := false; b := true; if (a and b) then writeln('Line 3 - Condition is true' ) else writeln('Line 3 - Condition is not true' ); if not (a and b) then writeln('Line 4 - Condition is true' ); end.
-
按位运算符
按位运算符对位进行运算并执行逐位操作。所有这些运算符都对整数操作数起作用,并产生整数结果。按位和(&),按位或(|)和按位非(〜)的真值表如下-p q p & q p | q p ^ q 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1 假设A = 60; 和B =13。以二进制格式,它们将如下所示-A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A | B = 0011 1101 A ^ B = 0011 0001 〜A = 1100 0011
下表列出了go语言支持的按位运算符。假设变量A为60,变量B为13,则-操作符 描述 例子 & 如果两个操作数中都存在二进制AND运算符,则会将一位复制到结果中。 (A&B)将得到12,即0000 1100 | 如果任一操作数中存在二进制或运算符,则会对其进行复制。 (A | B)将得到61,即0011 1101 ^ 如果在一个操作数中设置了该位,但不是在两个操作数中都设置了位,则二进制XOR运算符将复制该位。 (A ^ B)将得到49,即0011 0001 << 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 A << 2 将得到240,即1111 0000 >> 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 A >> 2将得到15,即0000 1111 示例::
尝试一下program beBitwise; var a, b, c: integer; begin a := 60; (* 60 = 0011 1100 *) b := 13; (* 13 = 0000 1101 *) c := 0; c := a and b; (* 12 = 0000 1100 *) writeln('Line 1 - Value of c is ', c ); c := a or b; (* 61 = 0011 1101 *) writeln('Line 2 - Value of c is ', c ); c := not a; (* -61 = 1100 0011 *) writeln('Line 3 - Value of c is ', c ); c := a << 2; (* 240 = 1111 0000 *) writeln('Line 4 - Value of c is ', c ); c := a >> 2; (* 15 = 0000 1111 *) writeln('Line 5 - Value of c is ', c ); end.
请注意,Pascal的不同实现在按位运算符中有所不同。Free Pascal是我们在这里使用的编译器,支持以下按位运算符-
操作符 运作方式 not 按位 非 and 按位 和 or 按位 或 xor 按位 异或 shl 按位 左移 shr 按位 右移 << 按位 左移 >> 按位 右移 -
Go中的运算符优先级
运算符优先级确定表达式中术语的分组。这会影响表达式的计算方式。某些运算符的优先级比其他运算符高;例如,乘法运算符的优先级高于加法运算符。例如x = 7 + 3 * 2; 在这里,x被赋值为13,而不是20,因为运算符*的优先级比+高,因此它首先与3 * 2相乘,然后加到7。在这里,优先级最高的运算符出现在表格的顶部,而优先级最低的运算符出现在表格的底部。在表达式中,优先级较高的运算符将首先被计算。运算符 优先级 ~, not, Highest *, /, div, mod, and, & |, !, +, -, or, =, <>, <, <=, >, >=, in or else, and then Lowest 示例::
尝试一下program opPrecedence; var a, b, c, d : integer; e: real; begin a := 20; b := 10; c := 15; d := 5; e := (a + b) * c / d; (* ( 30 * 15 ) / 5 *) writeln('Value of (a + b) * c / d is : ', e:3:1 ); e := ((a + b) * c) / d; (* (30 * 15 ) / 5 *) writeln('Value of ((a + b) * c) / d is : ' , e:3:1 ); e := (a + b) * (c / d); (* (30) * (15/5) *) writeln('Value of (a + b) * (c / d) is : ', e:3:1); e := a + (b * c) / d; (* 20 + (150/5) *) writeln('Value of a + (b * c) / d is : ' , e:3:1 ); end.