美文网首页C++程序员
Cpp:算术操作符与关系操作符

Cpp:算术操作符与关系操作符

作者: LuuilX | 来源:发表于2015-11-26 17:11 被阅读107次

    这里开始第五章《表达式》的内容。下面是 算术操作符 的内容

    C++有丰富的操作符,并定义了当操作数是内置类型时操作符的含义。而且C++还支持操作符重载,标准库正是使用该功能定义。

    表达式是由一个或多个 操作数(operand) 通过 操作符(operator) 组合而成。每个表达式会产生一个结果,如果表达式中无操作符,则表达式的结果就是操作数本身。如

    int val = 0;
    if(val)
        //...
    

    val 看作是if语句的条件表达式。

    操作符 功能 用法
    + 一元正号 + expr
    - 一元负号 - expr
    * 乘法 expr * expr
    / 除法 expr / expr
    % 求余(操作数只能为整型) expr % expr
    + 加法 expr + expr
    - 减法 expr - expr

    注: expre 为表达式

    求模 % 符号:

    • 当两个操作数都是正数(或0)时,结果为正;
    • 当两个操作数都是负数,结果为负(或0)
    • 一正一负时,求模结果的符号取决于机器;

    在我的机器上有

    cout << 10 % 3 << endl;
    cout << -10 % -3 << endl;
    cout << -10 % 3 << endl;
    cout << 10 % -3 << endl;
    

    结果

    1
    -1
    -1
    1
    

    可以看出:我的机器上,求模结果的符号随分子确定(除出来的值向负无穷一侧取整)。

    cout << -30/3*21%4 << endl;
    cout << 30/3*21%5 << endl;
    

    结果

    -2
    0
    

    关系操作符和逻辑运算符

    操作符 功能 用法
    ! 逻辑非 ! expr
    < 小于 expr < expr
    <= 小等于 expr <= expr
    > 大于 expr > expr
    >= 大等于 expr >= expr
    == 相等 expr == expr
    != 不等于 expr != expr
    && 逻辑与 expr && expr
    逻辑或 expr expr

    上述操作符产生的结果均是bool值。

    • !: expr为真时, !expr为假;
    • &&: expr1和expr2都为真时, expr1 && expr2 结果为真,否则为假;
    • ||: expr1和expr2都为假时, expr1 && expr2 结果为假,否则为真;

    其中,&&|| 操作符只有当 expr1的值不能确定整个表达式的值时,才会解第二个expr2的值,称为 短路求值(short-circuit evaluation)

    不能串接使用关系操作符(逻辑操作符可以): if(i < j < k) 是错误的。

    下面有一个很有趣的程序

    char *cp = "hello";
    while (cp && *cp)
    {
        cout << cp << endl;
        cout << *cp << endl;
        ++cp;
    }
    

    输出

    hello
    h
    ello
    e
    llo
    l
    lo
    l
    o
    o
    

    举例

    编写程序:判断四个值a、b、c、d是否满足 a>b、b>c且c>d。

    int main()
    {
        int a = 3, b = 2, c = 1, d = 0;
        cout << (a > b && b > c && c > d) << endl;
        return 0;
    }
    

    结果

    1
    

    上述 && 表达式也会采用 短路求值 法求解

    END.


    相关文章

      网友评论

        本文标题:Cpp:算术操作符与关系操作符

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