Objective-C 运算符

  • 运算符

    运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。Objective-C语言具有丰富的内置运算符,并提供以下类型的运算符-
    • 算术运算符
    • 关系运算符
    • 逻辑运算符
    • 按位运算符
    • 赋值运算符
    • 杂项运算符
    本教程将逐一说明算术,关系,逻辑,按位,赋值和其他运算符。
  • 算术运算符

    下表显示了Objective-C语言支持的所有算术运算符。假设变量A持有10,变量B持有20,则-
    操作符 描述 示例
    + 加法-在运算符的任一侧添加值。 a + b得30
    - 减法-从左手操作数中减去右手操作数。 a - b得-10
    * 乘法-将运算符两侧的值相乘。 a * b得200
    / 除法-将左操作数除以右操作数。 b / a得2
    模数-将左操作数除以右操作数,并返回余数。 b %a得0
    ++ 增量运算符将整数值增加1 a++ 得11
    -- 减量运算符将整数值减1 a-- 得 9
  • 关系运算符

    下表显示了Objective-C语言支持的所有关系运算符。假设变量A持有10,变量B持有20,则-
    操作符 描述 示例
    == 检查两个操作数的值是否相等;如果是,则条件为真。 (A == B)为false。
    != 检查两个操作数的值是否相等;如果值不相等,则条件为真。 (A!= B)为true。
    > 检查左操作数的值是否大于右操作数的值;如果是,则条件为真。 (A > B)为false。
    < 检查左操作数的值是否小于右操作数的值;如果是,则条件为真。 (A < B )为true。
    >= 检查左操作数的值是否大于或等于右操作数的值;如果是,则条件为真。 (A >= B)为false。
    <= 检查左操作数的值是否小于或等于右操作数的值;如果是,则条件为真。 (A <= B)为true。
  • 赋值运算符

    假设变量a持有10,变量b持有20,则-
    操作符 描述 示例
    = 简单赋值运算符,用于将值从右侧操作数分配到左侧操作数。 c = a + b会将a + b的值赋给c
    += 添加AND赋值运算符,将右操作数添加到左操作数,并将结果分配给左操作数。 c += a等效于c = c + a
    -= 减去AND赋值运算符,从左侧操作数中减去右侧操作数,然后将结果分配给左侧操作数。 c -= a等效于c = c - a
    *= 将AND赋值运算符相乘,将右操作数与左操作数相乘,然后将结果分配给左操作数。 c *= a等效于c = c * a
    /= 除法AND赋值运算符,将左操作数除以右操作数,并将结果分配给左操作数。 c /= a等效于c = c / a
    %= 模AND赋值运算符,使用两个操作数获取模数,并将结果分配给左操作数。 c %= a等效于c = c % a
    <<= 左移AND赋值运算符 C <<= 2与C = C << 2 等效
    >>= 右移和赋值运算符 C >>= 2与C = C >> 2 等效
    &= 按位与赋值运算符 C &= 2 与C = C & 2 等效
    ^= 按位异或和赋值运算符 C ^= 2 与 C = C ^ 2 等效
    |= 按位或运算符和赋值运算符 C |= 2 等于 C = C | 2 等效
  • 按位运算符

    按位运算符对位进行运算并执行逐位运算。假设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
    
    下表列出了Objective-C语言支持的按位运算符。假设变量A持60,变量B持13,然后-
    操作符 描述 示例
    & 如果两个操作数中都存在二进制位1,则会将一位复制到结果中。 (a&b)将得到12,即0000 1100
    | 如果任一操作数中存在二进制1,则会对其进行复制。 (a | b)将给出61,即0011 1101
    ^ 如果在一个操作数中设置了该位,但不是在两个操作数中都设置了位,则二进制异或运算符将复制该位。 (a ^ b)将得出49,即0011 0001
    ~ 二进制补码运算符是一元的,具有“翻转”位的作用。 (~a)将给出-61,这是2的补码形式的1100 0011(由于带符号的二进制数)。
    << 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 << 2将得到240,即1111 0000
    >> 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 a >> 2将得到15,即0000 1111
  • 逻辑运算符

    下表显示了Objective-C语言支持的所有逻辑运算符。假设变量A保持1,变量B保持0,则-
    操作符 描述 示例
    && 称为逻辑和运算符。如果两个操作数都不为零,则条件变为true。 (a && b)是false。
    || 称为逻辑或运算符。如果两个操作数中的任何一个都不为零,则条件变为true。 (a || b)是true。
    ! 称为逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将为假。 !(a && b) 是true。
  • 三元运算符和sizeof

    还有一些其他重要的操作符,包括sizeof?:和取址符&由Objective-C语言支持。
    操作符 描述 示例
    ?: 条件表达式 (如果条件为真 ? 然后值X : 否则值Y
    sizeof() 返回变量的大小。 sizeof(a),其中a为int,将返回4。
    & 返回变量的地址。 &a; 将给出变量a的实际地址。
    * 指向变量的指针。 *a; 将指向变量a。
  • 运算符优先级

    运算符优先级确定表达式中术语的分组。这会影响表达式的求值方式。某些运算符具有更高的优先级;例如,乘法运算符的优先级比加法运算符高。例如,x = 7 + 3 * 2; 在这里,x被赋值为13,而不是20,因为运算符*的优先级比+高,因此它首先与3 * 2相乘,然后加到7。在这里,优先级最高的运算符出现在表格的顶部,而优先级最低的运算符出现在表格的底部。在表达式中,优先级更高的运算符将首先被计算。
    操作符 描述
    () [] -> . ++ -- 左到右
    + - ! ~ ++ -- (type)* & sizeof 右到左
    * / % 左到右
    + - 左到右
    << >> 左到右
    < <= > >= 左到右
    == != 左到右
    ^ 左到右
    | 左到右
    && 左到右
    || 左到右
    ?: 右到左
    =  += -=  *=  /= %=  >>= <<= &= ^= |= 右到左
    , 左到右