美文网首页
1 运算符和表达式

1 运算符和表达式

作者: 牛在汇上飞 | 来源:发表于2018-10-23 12:02 被阅读0次

    某些数字和字符的组合是特别重要的,它们被称为运算符,例如:
    算术运算符:+ – * / %
    逻辑运算符:&& ||
    赋值运算符:= += *=

    运算符常用在表达式中,只有结合操作数时才有意义。
    需要特别注意标点符号,如圆括号、方括号、逗号、冒号、分号。
    运算符、标点符号、空格用来分割语句的不同部分。

    表达式
    一个表达式由一个或多个操作数和运算符组成,
    一个表达式可写在一行内,也可以分成若干行来书写

    示例:
    a++; b= 10;
    x= (y*z)
    /w;

    注:一个表达式的最后必须由一个分号(;) 来表示结束。

    算术运算符
    求和 i= j + 2;
    求差 i= j - 3;
    改为相反数 x= - x;
    乘法 z= 3 * x;
    除法 i= j / 5;
    求余 minutes= time % 60;
    自加1 i++;
    自减1 k--;

    自增自减运算符不能被嵌套在表达式中
    int a= 3;
    a++; // 正确的表达式写法
    int b= (a++)*3; // 无效的表达式写法

    赋值运算符
    将右侧的表达式赋值给左侧的变量
    y= x; // 将x的值赋值给y

    下列表达式中赋值运算符结合了算术运算符或位运算符:
    y += x; // 在 y 值上加上 x
    y -= x; // 在 y 值上减去 x
    y *= x; // 在 y 值上乘以 x
    y /= x; // 在 y 值上除以 x
    y %= x; // 在 y 值上求 x 的模
    y >>= x; // 把 y 值向右做 x 位逻辑移位
    y <<= x; // 把 y 值向左做 x 位逻辑移位
    y &= x; // AND 位运算符
    y |= x; // OR 位运算符
    y ^= x; // 把 x 和 y 按做逻辑异或的操作

    注:
    一个表达式只能有一个赋值运算符.
    位运算符只能用于整型数据。
    逻辑移位运算符中 x 值只能是小于 5 位的二进制数,过大的数值将会被拒绝。所以移动范围只能是 0 到 31 。
    用 %= 运算符求模 ( 求y/x的模),其结果赋予y。

    关系运算符
    表示两个运算式之间的大小关系。 其返回值为False(0)或True(1)
    整数0代表逻辑假值FALSE,任何非零的值代表逻辑真值(true)。
    a==b; // a等于b
    a!=b; // a不等于b
    a<b; // a小于b
    a>b; // a大于b
    a<=b; // a小于等于b
    a>=b; // a大于等于b
    两个浮点型数据不能用 == 或 != 运算符比较,但是我们可以把二者相减,并将所得结果和null进行比较。

    布尔运算符
    否定运算符 非(!), 用来表示真假的反面的结果。
    if(!a) // 如果a不是真的
    Print("不是 'a'");

    逻辑运算符 或(||), 用来表示两个表达式中只要有一个成立即为真。
    示例:
    if(x || y)
    Print("超出范围");

    逻辑运算符 和(&&), 用来表示两个表达式要同时成立才为真。
    示例:
    if(p!=x && p>y)
    Print("真");
    n++;

    位逻辑运算符
    ~ // 取反运算符(~) 对变量值二进制代码按位取反(求补)。表达式值中所有1变为0,而0变为1。
    b= ~n;

    .>> // 将二进制代码表示的X逻辑右移Y位。右移是逻辑运算,即左侧用零填满。
    x= x >> y;

    << // 将二进制代码表示的X逻辑左移Y位,右侧(低位)用零填满
    x= x << y;

    二进制中表示的x和Y位运算与(&)。如果x和y两个相应的二进制位都为1,则该位的结果为1,否则为0。
    b = ((x & y) != 0);

    二进制中表示的x和Y位运算或(|)。如果x和y两个相应的二进制位都为0,则该位的结果为0,否则为1。
    b = x | y

    二进制中表示的x和Y位运算异或(~)。如果x和y两个相应的二进制位相异,则该位的结果为1,否则为0。
    b = x ^ y;

    注:位逻辑运算符只适合用于整型数据类型。

    其它运算符
    下标
    数组的第i个元素的序号,i可以为整数或整型表达式。

    示例
    array[i]= 3; // 将3赋值到array数组第i个元素的位置上

    成为数组的下标必须是整数。只允许使用四维或四维以内的数组。每维索引是从0到(数组总长度-1)。例如,一个有50个元素组成的一维数组,引用第一个数组元素用array[0],这样,最后一个数组元素将足array[49]。
    如果访问数组超出了数组下标范围,系统将会出错 ERR_ARRAY_INDEX_OUT_OF_RANGE (下标超过范围),

    调用xl,x2,…,xn形式参数的函数
    每个形参可以是一个常量、一个变量和相应类型的表达式。传递的参数用逗号隔开,并放在圆括号()内,函数名放在圆括号()前。
    用此函数返回表达式值。如果函数返回值定义为void型,这些函数调用就不能放在赋值号右边。请确认表达式xl,x2,…,xn是按序执行的。

    示例:
    double SL= Ask-25Point;
    double TP= Ask+25
    Point;
    int ticket= OrderSend(Symbol(), OP_BUY, 1, Ask, 3, SL, TP, "My comment", 123, 0, Red);

    逗号运算符
    用逗号分隔的表达式是按从左到右的顺序执行。所有表达式都是先算左边的,再算右边的,其结果的类型和值由右边表达式决定。函数的参数表也可视为一个范例(参见上面)。

    示例:
    int i;
    int j;
    for(i=0,j=99; i<100; i++,j--){
    }
    Print(" i= "+i, " j= "+j);
    // 结果显示为 i= 100 j= -1

    优先级别规则
    下面是从上到下的运算优先规则,优先级高的将先被运算。
    下表中同组运算符优先级相同。排在前面的运算符优先级高,排在后而的运算符优先级低。运算符按优先级顺序从高到低排列如下:

    () 函数调用 从左到右
    [] 引用数组元素
    ! 真假运算符 从右到左
    .- 改变符号
    ++ 自增
    -- 自减
    ~ "按位取反"运算符
    & "按位与"位运算符 从左到右
    | "按位或"位运算符
    ^ "按位异或"位运算符
    << 逻辑左移
    .>> 逻辑右移
    .* 乘法 从左到右
    / 除法
    % 求模
    .+ 加法 从左到右
    .- 减法
    < 小于 从左到右
    <= 小于等于
    .> 大于

    .>= 大于等于
    == 等于
    != 不等于
    || 逻辑 或 从左到右
    && 逻辑 与 从左到右
    = 赋值 从右到左
    += 加法复合赋值运算符
    -= 减法复合赋值运算符
    *= 乘法复合赋值运算符
    /= 除法复合赋值运算符
    %= 求模复合赋值运算符
    .>>= 右移复合赋值运算符
    <<= 左移复合赋值运算符
    &= 按位与复合赋值运算符
    |= 按位或复合赋值运算符
    ^= 按位异或复合赋值运算符

    高优先级的圆括号可以改变运算符的执行顺序。
    注意:在MQL4程序中,运算符的优先级不同于C 语言。

    相关文章

      网友评论

          本文标题:1 运算符和表达式

          本文链接:https://www.haomeiwen.com/subject/bpdzaftx.html