跳转至

运算符和表达式

  • 运算符和表达式的区分:简单理解就是 加分号的是语句;不加分号就是表达式。
    2 + 3   // 表达式
    2 + 3;  // 语句
    

运算符

类别 运算符
算术运算符 + - * / % ++ --
关系运算符 < <= == > >= !=
逻辑运算符 ! && ||
位运算符 << >> ~ | ^ &
赋值运算符 = += -= *= /= %= <<= >>= &= ^= |=
条件运算符 ? :
逗号运算符 ,
指针运算符 * &
求字节数 sizeof
强制类型转换 (type)
分量运算符 . ->
下标运算符 []
其它 ()
  • 运算符的优先级和结合性见计算的优先级和顺序
  • % 左右操作数是整型数。
  • 逻辑运算符(&&、||)注意短路特性。
    // 从左向右运算,如果已经符合该运算符运算特效则直接结束运算
    
    int a = 1, b = 2, c = 3, d = 4;
    int m = 1, n = 1;
    
    (m = a > b) && (n = c > d);
    
    // 执行后,m为1,n依然为1;因为短路特性,n = c > d 不运算。
    

位运算

  • 右移( >> )一位 左补0,除以2

    i = 1100 -> 12
    i >> 1 -> 110 -> 6 相当于除以2
    

  • 左移( << )一位 右补0,乘以2

    i = 110 -> 6
    i << 1 -> 1100 -> 12 相当于乘以2
    

  • 按位取反( ~ )

    i = 1100 -> 12
    ~i = 0011 -> 3
    

  • 按位或( | );有一位为真即为真

    i = 1100
    j = 1001
    i | j = 1101
    

  • 按位与( & );同时为真才为真

    i = 1100
    j = 1001
    i & j = 1000
    

  • 异或( ^ );相同为0,不同为1

    i = 1100
    j = 1001
    i ^ j = 0101
    

  • 位运算的用法

    • 将操作数中第n位置1,其他位不变。把第n位或1就是该位与1的或,所以表达式为: num = mum | 1 << n;
    • 将操作数中第n位清0,其他位不变。num = num & ~(1 << n);
    • 测试第n位。num & 1 << n;
    • 从一个指定宽度的数中取出其中的某几位。