操作符可以分很多的类,例如:算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用,函数调用和结构成员.这篇博客则是把每类操作符介绍一下.
算术操作符: + - * / %
常见的运算符号:加减乘除,常用于整数和浮点数
整数/整数还是等于整数
%,取余,操作数必须是整数
移位操作符:<< >>
左边操作符<< : 左边抛弃,右边补0
右移操作符>>: 右边抛弃,左边补0
- 逻辑移位 左边用0填充,右边丢弃
- 算术移位 左边用原该值的符号位填充,右边丢弃
位操作符:& | ^
#include <stdio.h> int main() { int num1 = 1; int num2 = 2; num1 & num2;//按位与 num1 | num2;//按位或 num1 ^ num2;//按位异或 return 0; }
赋值操作符: =
可以给一个变量重新赋值
复合赋值符: += *= /= %= >>= <<= &= |= ^=
经过运算,把值返回自身
i=i+1; i+=1; //两者等价
单目操作符: ! - + & sizeof ~ -- -- ++ *
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
关系操作符:> >= < <= != ==
用于比较两个数的大小
在代码中'=='号的意思才是相等,切不可与'='混用
逻辑操作符:|| &&
1&2----->0 1&&2---->1 1|2----->3 1||2---->1
条件操作符: exp1?exp2:exp3
是一个三目操作符
a>b?a:b; //如果a>b为真,则输出a;为假,输出b
逗号表达式: ,
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果
下标引用、函数调用和结构成员
1,下标应用:
char arr[10]={0};//定义一个十个元素的数组arr,初始化都为0 for(int i=0;i<10;++i) { printf("%d",arr[i]): } //打印数组的每一个元素
2,函数调用:
#include <stdio.h> void test1() { printf("hehe\n"); } void test2(const char *str) { printf("%s\n", str); } int main() { test1(); //实用()作为函数调用操作符。 test2("hello world");//实用()作为函数调用操作符。 return 0; }
3,结构成员:
#include <stdio.h> struct Stu { char name[10]; int age; char sex[5]; double score; }; void set_age1(struct Stu stu) { stu.age = 18; } void set_age2(struct Stu* pStu) { pStu->age = 18;//结构成员访问 } int main() { struct Stu stu; struct Stu* pStu = &stu;//结构成员访问 stu.age = 20;//结构成员访问 set_age1(stu); pStu->age = 20;//结构成员访问 set_age2(pStu); return 0; }
操作符的属性:
复杂表达式的求值有三个影响的因素。
1. 操作符的优先级
2. 操作符的结合性
3. 是否控制求值顺序。 两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
这些只是对函数操作符的大概概述,操作符是写代码的基础,还是需要大量的练习来实习.