C---运算符和表达式

C++运算符和表达式

运算符

C++的运算符非常丰富,赋值号(=)也是一种运算符,当然还有其他的

  • 算术运算符

    取余 自加 自减
    + - * / % ++ --

    字符 整形 浮点型三种大类的数据可以相互利用算数运算符进行计算

    char先通过ASCII转为int再进行数学运算,如果有其他更高级数据,就向其靠拢,最终汇总于double

    等级分布: char -> int -> unsigned -> long -> double <- float

    自加自减运算符的位置也有要求

    比如++i就是先将i自加一后再调用,i++是调用完再自加一

    在自加过后将永久改变变量中存储的值

  • 关系运算符

    大于 小于 等于 大于等于 小于等于 不等
    > < == >= <= !=
  • 逻辑运算符

    && `
  • 位运算符

    按位左移 按位右移 按位与 按位或 按位异或 按位取反
    << >> & ` ` ^
  • 赋值运算符

    =及扩展运算符

    注意:赋值运算符在对不同数据类型进行操作时本质上是把内存中合适的二进制数据赋值给被操作数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    int x;
    float y = 3.6;
    x = y;

    short i =289;
    char c;
    c = i;

    return x, c;

    该程序的返回值是3 ! (ASCII==33)

    前者的原因是赋值了符合规则的部分,所以只有整数

    后者是二进制数据照搬导致的

    i: | 0 0 0 0 0 0 0 1 | 0 0 1 0 0 0 0 1 |

    c: | \ \ \ \ \ \ \ \ | 0 0 1 0 0 0 0 1 |

    所以c在内存中就是(0010001)2==(33)10

    类似的操作方式还有signed = unsigned

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream>
    using namespace std;
    int main(int argc, char const *argv[])
    {
    unsigned short a;
    short b = -1;
    cout << "b = " << b << endl;
    a = b;
    cout << "a = " << a << endl;
    return 0;
    }

    输出:a = 65535 b = -1

    这是因为: (-1)10 -> 1(1 11 11 11 11 11 11 11)2 -> (11 11 11 11 11 11 11 11 11)2 -> (65535)10

    b的符号位和数据位都是1,完全照搬全给了a的数据位,所以(1111111111111111)2的十进制表示为(65535)10

    其拓展运算符—复合赋值运算符的用法和python一样,但是种类更多

    但凡是二元运算符,都可以与=号结合形成复合赋值运算符

  • 条件运算符

    ? :

  • 逗号运算符

    ,又称谓顺序求值运算符, 其作用是先求表达式1再求表达式2,整个逗号表达式的值是表达式2

    3 + 8, 4 + 10的值为14

    如果是这个表达式a = 3 + 5, a * 4由于赋值号的优先值>逗号的优先值

    所以该语句会先给a赋值8,再返回32

  • 指针运算符

    *

  • 引用和地址运算符

    &

  • 求字节数运算符

    sizeof

  • 强制类型转换运算符

    一般形式为(类型)(数据)

    可以有时候简化为
    数据类型()/(数据类型)

  • 成员运算符

    .

  • 指向成员的运算符

    ->

  • 下标运算符

    []

  • 其他运算符

    比如像函数调用运算符()

  • Copyrights © 2024 Cdog Shen
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信