1.算术运算符
+加法运算符
-减法运算符
*乘法运算符
/除法运算符
%取模运算符
++自增运算符
--自减运算符
对于除法运算符,需要注意的是,当被除数跟出书都是整型时,并不会得到一个double浮点型的数,而是直接舍去小数部分。举例如下:
#include<stdio.h>
int main(){
int a = 5, b = 4, c = 5, d = 6;
printf("%d %d %d\n",a/b,a/c,a/d);
return 0;
}
可以看到,5/4直接舍掉小数部分变成了1,而5/6直接变成了0
补充:除数如果是0,会导致程序异常退出或是得到错误输出“1.#INF00”,因此在出现问题时请检查是否在某种情况下除数为零。
加减乘除四种运算符的优先级顺序和四则运算的优先级相同
取模运算符返回被除数与除数相除得到的余数,举例如下:
#include<stdio.h>
int main(){
int a = 5, b = 3, c = 5;
printf("%d %d\n",a%b,a%c);
return 0;
}
输出结果:2 0
与除法运算符一样,除数不允许为0,因此当出问题的时候应先考虑除数是否有可能为零
取模运算符的优先级和除法运算符相同
再来讨论自增运算符
自增运算符有两种写法:i++或++i 这两个都可以实现把i增加1的功能
他们的区别在于i++是先使用i再将i加1,而++i则是先将i加1再使用i
来看下例子:
#include<stdio.h>
int main(){
int a = 1,b = 1,n1,n2;
n1 = a++;
n2 = ++b;
printf("%d %d\n",n1,a);
printf("%d %d\n",n2,b);
return 0;
}
输出结果: 1 2
2 2
首先看n1 = a++:这里n1先获得a的值,再将a加1,因此n1和a分别为1和2;
接着n2=++b:先将b加1,n2再获得b的值,因此n2和b分别为2和2
2.关系运算符
常用的关系运算符共有六种:<, >, <=, >=, ==, !=(表达式成立时返回1true,不成立时返回0false)
3.逻辑运算符
常用的逻辑运算符有三种:&&,ll,!,分别对应“与”,“或”,“非”
a&&b:ab都真,则返回真,其他情况都返回佳
a ll b: ab都假,则返回假,其他情况都返回真
!a:如果a为真,则返回假;a为假,则返回真
4.条件运算符
条件运算符(?:)是C语言中唯一的三目运算符,即需要三个参数的运算符,格式如下:
A ? B : C;
其含义是:如果A为真,那么执行并返回B的结果;如果A为假,则执行并返回C的结果
例子如下:
#include<stdio.h>
int main(){
int a = 3,b = 5;
int c = a > b ? 7 : 11;
printf("%d\n",c);
return 0;
}
输出结果:11
在上述代码中,由于a>5不成立,所以返回冒号后面的11,并将11赋值给c
5.位运算符
格式:
const int INF = (1<<30)-1;
位运算符有六种:
运算符 | 含义 | 语法 | 效果 |
<< | 左移 | a<<x | 整数a按二进制左移x位 |
>> | 右移 | a>>x | 整数a按二进制右移x位 |
& | 位与 | a&b | 整数a和b按二进制对齐,按位进行与运算(除了11得1,其余为0) |
l | 位或 | a l b | 整数a和b按二进制对齐,按位进行或运算(除了00得0,其余为1) |
^ | 位异或 | a ^ b | 整数a和b按二进制对齐,按位进行异或运算(相同位0,不同为1) |
~ | 位取反 | ~a | 整数a的二进制的每一位进行0变1,1变0的操作 |