跳转到内容

C 语言入门/C 运算符

来自维基教科书,开放的书籍,开放的世界

C 支持以下算术运算符

   c = a * b     multiplication
   c = a / b     division
   c = a % b     mod (remainder division)
   c = a + b     addition
   c = a - b     subtraction

它还支持以下有用的(如果很神秘)“递增”和“递减”运算符

   ++a           increment
   --a           decrement

这些运算符也可以表示为“a++”和“a--”。如果只需要递增或递减,那么两种形式之间的区别无关紧要。但是,如果一个变量作为某个表达式的一部分被递增或递减,那么“++a”表示“先递增变量,然后获取其值”,而“a++”表示“先获取变量的值,然后递增它”。忘记这种区别会导致细微的编程错误。

最后,C 支持一组位运算符

   a = ~a         bit complement
   a = b << c     shift b left by number of bits stored in c
   a = b >> c     shift b right by number of bits stored in c
   a = b & c      b AND c
   a = b ^ c      b XOR c
   a = b | c      b OR c

C 允许以快捷方式执行数学运算

   operation        shortcut
   _________________________

   a = a * b         a *= b 
   a = a / b         a /= b 
   a = a % b         a %= b 
   a = a + b         a += b 
   a = a - b         a -= b 
   a = a << b        a <<= b 
   a = a >> b        a >>= b 
   a = a & b         a &= b 
   a = a ^ b         a ^= b 
   a = a | b         a |= b 
   _________________________

C 关系运算符在上一章中讨论过,这里为了完整性而重复。

   a == b    equals
   a != b    not equals
   a < b     less than
   a > b     greater than
   a <= b    less than or equals
   a >= b    greater than or equals

这些实际上是数学运算,如果为真则返回 1,如果为假则返回 0。以下运算在语法上是合理的

   a = b * ( b < 2 ) + 10 * ( b >= 2 );

这将使“a”的值为“b”,如果“b”小于 2,否则为“10”。这很可爱,但不推荐。它很神秘;可能使移植到其他语言变得更加困难;并且在这种情况下,可以使用上一章中讨论的条件运算符更有效地完成此操作。

   a = ( b < 2 ) ? b : 10;

此条件运算符也称为“三元”运算符。

存在类似的逻辑运算符

   !     logical NOT
   &&    logical AND
   ||    logical OR

请记住,这些是逻辑运算,而不是位运算——不要将“&&”和“||”与“&”和“|”混淆。区别在于,虽然位运算符对每个位执行运算,但逻辑运算符只是评估其操作数的值为 0 或 1(在这样的比较中,任何非零操作数的值都评估为 1),并返回 0 或 1。

   if(( A == 5 ) && ( B == 10 ))
   {
      ...
   }

最后,有一个“sizeof”运算符,它以字节为单位返回特定操作数的大小

   int tvar;
   ...
   printf ( "Size = %d\n", sizeof( int ) );

这对某些大容量存储操作很有用。“sizeof()”函数可以接受数据类型名称或变量名,变量可以是数组,在这种情况下,“sizeof()”给出整个数组的大小。

这些运算符在数学函数中的优先级——也就是说,哪些运算符在其他运算符之前进行评估——定义如下,从最高优先级到最低优先级

   ()     []     ->     .
   !      ~      ++     --     (cast)      &      sizeof   - (minus prefix)
        /      %
   +      -
   <<     >>
   <      <=     >      >=
   ==     !=
   &

   ^
   |
   &&
   ||
   ?:
   =      +=     -=     *=     /=     %=     >>=     <<=     &=
   ^=     |=
   , 

当然,可以使用括号来控制优先级。如果对表达式的评估顺序有疑问,请添加更多括号。它们不会造成任何麻烦,并且可能会避免一些痛苦。

高级数学运算可作为库函数使用。这些将在后面的章节中讨论。

华夏公益教科书