操作符的分类:
• 算术操作符: + 、- 、* 、/ 、%• 移位操作符: << >>• 位操作符: & | ^• 赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=• 单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof、(类型)• 关系操作符: > 、>= 、< 、<= 、 == 、 !=• 逻辑操作符: && 、||• 条件操作符: ? :• 逗号表达式: ,• 下标引⽤: []• 函数调⽤: ()• 结构成员访问: . 、 ->
1.算术操作符
在写代码时候,⼀定会涉及到计算。C语⾔中为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是: + - * / % ,这些操作符都是 双⽬操作符。
1.1 + 和 -
+
和
-
⽤来完成加法和减法。
+
和
-
都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双⽬操作符。
代码演示:
int x = 4 + 22;
int y = 61 - 23;
printf("%d\n", x);
printf("%d\n", y);
return 0;
输出结果:
1.2 *
int num = 5;
printf("%d\n", num * num);
1.3 /
除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。
float x = 6 / 4;
int y = 6 / 4;
printf("%f\n", x);
printf("%d\n", y);
输出结果;
上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是1.5 。原因就在于 C 语⾔⾥⾯的整数除法是整除,只会返回整数部分,丢弃⼩数部分。如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。
float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%f\n", x); // 输出 1.500000
1.4 %
运算符 % 表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。
负数求模的规则是,结果的正负号由第⼀个运算数的正负号决定。
printf("%d\n", 11 % 5);
printf("%d\n", 11 % -5);
printf("%d\n", -11 % -5);
printf("%d\n", -11 % 5);
输出结果;
2.sizeof
sizeof
是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字 节。
sizeof
操作符的操作数可以是类型,也可是变量或者表达式。
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(a));
printf("%zd\n", sizeof(a=b+1));
printf("%zd\n", sizeof(1.5+1));
sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。sizeof 的计算结果是 size_t 类型的。
int a = 3;
short b = 1.5;
printf("%zd\n", sizeof(a));
printf("%zd\n", sizeof a);
printf("%zd\n", sizeof(a=b+1));
printf("%d\n", a);
zeof
在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。
3.赋值操作符:=和复合赋值
3.1赋值操作符 =
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
赋值操作符 =是⼀个随时可以给变量赋值的操作符。
int a;
a = 100;
3.2复合赋值符
在写代码时,我们经常可能对⼀个数进⾏⾃增、⾃减的操作,如下代码:
1 int a = 10;
2 a = a+3;
3 a = a-2;
这样代码C语⾔给提供了更加⽅便的写法:
1 int a = 10;
2 a += 3;
3 a -= 2;
C语⾔中提供了复合赋值符,⽅便我们编写代码,这些赋值符有:
4.单⽬操作符:++、--、+、-
前⾯介绍的操作符都是双⽬操作符,有2个操作数的。C语⾔中还有⼀些操作符只有⼀个操作数,被称为单⽬操作符。 ++ 、 -- 、 +( 正 ) 、 -( 负 ) 就是单⽬操作符的.
4.1++和--
++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置--和后置--.
4.1.1前置++:
int a = 10;
int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
printf("a=%d b=%d\n",a , b);
计算⼝诀:先+1,后使⽤;
4.1.2后置++;
int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
printf("a=%d b=%d\n",a , b);
计算⼝诀:先使⽤,后+1
4.1.3前置--
如果你听懂了前置++,那前置--是同理的,只是把加1,换成了减1;
计算⼝诀:先-1,后使⽤
int a = 10;
int b = --a;//--的操作数是a,是放在a的前⾯的,就是前置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 9
4.1.4后置--
同理后置--类似于后置++,只是把加⼀换成了减⼀
计算⼝诀:先使⽤,后-1
int a = 10;
int b = a--;//--的操作数是a,是放在a的后⾯的,就是后置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 10
4.2+ 和 -
4.2.1这⾥的+是正号,-是负号,都是单⽬操作符。
运算符
+
对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。
int a = +10; 等价于 int a = 10;
4.2.2运算符 - ⽤来改变⼀个值的正负号
负数的前⾯加上 - 就会得到正数,正数的前⾯加上 - 会得到负数。
int a = 10;
int b = -a;
int c = -10;
printf("b=%d c=%d\n", b, c);//这⾥的b和c都是-10
int a = -10;
int b = -a;
printf("b=%d\n", b);