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.
    
    尝试一下