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) / % + - << >> < <= > >= == != & ^ | && || ?: = += -= *= /= %= >>= <<= &= ^= |= ,
当然,可以使用括号来控制优先级。如果对表达式的评估顺序有疑问,请添加更多括号。它们不会造成任何麻烦,并且可能会避免一些痛苦。
高级数学运算可作为库函数使用。这些将在后面的章节中讨论。