C语言——操作符小结
在C语言中操作符分为算数操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员访问。
首先我们介绍的是算数操作符。
算数操作符分为“ +,-,*,/,% ”,其中%运算的对象只能是整数,其他的操作符可作用于整数和浮点数。
对于“ / ”操作和“ * ”操作来说,如果它的接收值你希望是一个float型的,那么你的算术式中必须要出现浮点型的数据,如果这些浮点型数据都是常量的话系统还会将结果自动转化为double类型,这时我们只能对结果进行强制转换。
float a = 0;
a = 8/ 5.0;
printf("%f\n", a);
return 0;
编译时会发出warning:
如果表达式中的数据都是int类型,则返回值是int类型
float a = 0;
a = 8/ 5;
printf("%f\n", a);
return 0;
a是浮点型没错,我们以为a会是1.8,可是结果却是这样:
在我们日常操作中这些可都是坑啊。
移位操作符
移位操作符只有右移位“>>”和左移位“<<”这两个操作符,使用起来也非常简单方便。
右移位是对该数字的2进制码向右移动,向右移动几位左边便补几个0,右移位相当于对当前数字做除法运算;
左移位是对该数字的2进制码向左移动,向左移动几位右边便补几个0,左移位相当于对当前数字做乘法运算。
int a = 3;
int b = 4;
a >>=1;
b <<= 1;
printf("a=%d\n", a);
printf("b=%d\n", b);
移位操作符的作用对象只能是整型,不能是浮点型。
位操作符
位操作符有
& —— 按位与
| —— 按位或
^ —— 按位异或
位操作符的对象也必须为整数
关于“&”和“|”相信大家都很熟悉了,对于异或有这么一个操作可以不使用temp就交换两个数的值
int a = 3;
int b = 4;
a ^= b;
b ^= a;
a ^= b;
我们来看一下结果:
赋值操作符
赋值操作符有这些:
+= -= *= /= %= >>= <<= &= |= ^=
赋值操作符的用法我们都不陌生,就简单介绍就好了。
单目操作符
什么是单目操作符呢?
单目操作符是指运算所需变量为一个的运算符,即在运算当中只有一个操作数,又叫一元运算符。
单目操作符有这么几个
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置 --
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制转换
说说sizeof吧,sizeof通常用来求某个类型变量的长度,但是它也可以求一个数组的数组长度(以字节为单位)如:
int arr[10] = { 0 };
printf("%d\n",sizeof(arr));
结果当然是40,不相信你可以自己去验证。
关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
关系操作符我们从小学到大应该不用说了吧,只是要注意不要把判断相等“ == ”写成了赋值“ = ”
逻辑操作符、条件操作符、逗号表达式
逻辑操作符
&& 逻辑与
|| 逻辑或
条件操作符
exp1 ? exp2 : exp3
条件操作符就是传说中的三目运算符,当exp1成立时执行exp2,exp1不成立就执行exp3。
逗号表达式
exp1, exp2, exp3, …expN
逗号表达式我经常在创建变量和使用循环的时候会使用,其他地方使用次数很少
int a = 0, b = 0, c = 0;
for (i = 0, j = 1; i < 15; i++, j++)
下标引用、函数调用和结构成员访问
下标引用
[ ] 下标引用操作符
操作数:一个数组名 + 一个索引值
exp:
int arr[10];//创建数组
arr[9] = 10;//实用下标引用操作符。
[ ]的两个操作数是arr和9。
函数调用
.( ) 函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
exp:
#include<stdio.h>
void exp1()
{
printf("HelloWorld");
}
void exp2(int x, int y)
{
printf("%d\n", x + y);
}
int main()
{
exp1(); //实用()作为函数调用操作符
exp2(1, 2);
return 0;
}
结构成员访问
1、 . 结构体 . 成员名
2、->结构体指针->结构体指针
exp:
#include<stdio.h>
struct Student{
char name[100];
int age;
char sex[100];
};
int main()
{
struct Student stu;
struct Student *p;
stu.age = 18;
p->age = 20;
return 0;
}
最后总结一下需要注意的地方:
%运算的操作对象只能是int型数据
移位运算符、位运算符的操作对象只能是int型数据
在判断相等时要使用 == 而不是赋值符号 =