运算符是执行特定操作的符号,它主要用于表达式的构成。在C语言中运算符有很多种操作符,主要包括以下几种运算符:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
算术运算符
算术运算符主要是一些算术运算,例如加减乘除等。详细的运算规则如下表:
示例:
#include <stdio.h>
int main()
{
int a = 1, b1 = 2;
float b2 = 2.0;
printf("a + b1 = %dn", a + b1);
printf("a - b1 = %dn", a - b1);
printf("a * b1 = %dn", a * b1);
printf("a / b1 = %dn", a / b1);
printf("a / b2 = %fn", a / b2);
printf("a %% b1 = %dn", a % b1);
printf("a++ = %d ; a = %dn", a++, a);
printf("++a = %d ; a = %dn", ++a, a);
printf("a-- = %d ; a = %dn", a--, a);
printf("--a = %d ; a = %dn", --a, a);
return 0;
}
输出结果:
上述运算中有几点需要特别的注意。除法运算中如果两个操作数都是整数那么得到的结果也必然是整数而不是小数,如果两个操作数其中有一个数是小数那么其结果也是小数;对于整除运算结果也是整数。对于自增或自减运算,运算符在操作数之前和之后对于表达是本身来说有着一定的区别,但对于操作数自身是一样的;如果操作数在运算符的左边,则表达式的值就是操作数未运算之前的值,反之,就是运算之后的值。
关系运算符
关系运算符主要是操作数大小的判断运算,例如两个操作数是否相等。详细的运算规则如下表:
示例:
#include <stdio.h>
int main()
{
int a1 = 1, b1 = 2;
int a2 = 1;
printf("a1 == a2 : %dn", a1 == a2);
printf("a1 == b1 : %dn", a1 == b1);
printf("a1 != b1 : %dn", a1 != b1);
printf("a1 > b1 : %dn", a1 > b1);
printf("a1 >= a2 : %dn", a1 >= a2);
printf("a1 < b1 : %dn", a1 < b1);
printf("a1 <= b1 : %dn", a1 <= b1);
return 0;
}
输出结果:
上面的的输出结果中,1为真,0为假。
逻辑运算符
逻辑运算也叫布尔运算,主要是测试真假值。详细的运算规则如下表:
示例:
#include <stdio.h>
int main()
{
int a0 = 0, b0 = 0;
int a1 = 1, b1 = 1;
printf("a0 && b0 : %dn", a0 && b0);
printf("a0 && a1 : %dn", a0 && a1);
printf("a1 && b1 : %dn", a1 && b1);
printf("a0 || b1 : %dn", a0 || b1);
printf("!a0 : %dn", !a0);
printf("!a1 : %dn", !a1);
}
输出结果:
位运算
位运算是直接对操作数存储在内存中的二进制进行按位操作。所以其速度也会比一般的运算速度会快。详细的运算规则如下表:
示例:
#include <stdio.h>
int main()
{
int a = 5, b = 3;
printf("a & b = %dn", a & b);
printf("a | b = %dn", a | b);
return 0;
}
输出结果:
赋值运算
最简单的赋值运算符就是”=“,它的优先级很低,后面会介绍。详细的运算规则如下表:
示例:
#include <stdio.h>
int main()
{
int a = 1, b = 2, c = 3;
a += 1;
b -= 1;
c %= 2;
printf("a = %dn", a);
printf("b = %dn", b);
printf("c = %dn", c);
a <<= 2;
printf("a = %dn", a);
a >>= 1;
printf("a = %dn", a);
b >>= 1;
printf("b = %dn", b);
return 0;
}
输出结果:
杂项运算
除了上面几种运算符外,还有几种比较常用的运算符。详细的运算规则如下表:
sizeof()在数据类型章节已经介绍过,& 和 *在指针的篇幅会做详细的介绍,这里不过多说明。我们来看一个三目运算(?:)的例子,下面示例中如果“?”符号前a>b的条件成立,则取“:”符号前a的值,否则,取后面c的值。
示例:
#include <stdio.h>
int main()
{
int a = 1, b = 2, c = 3;
printf("a > b ? a : c= %dn", a > b ? a : c);
return 0;
}
输出结果:
运算符优先级
多个运算符在表达中出现时有着一定的运算顺序,不同运算符有优先级的高低,下表列出了不同运算符的优先级顺序,从上到下优先级从高到低。