C语言的操作符有很多种:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用函数调用和结构成员
算术操作符(+ - * / %)除了%只能作用于整数,其他几个操作符都可以作用于整数和浮点数
移位操作符左移操作符(<<)<< 左移操作符
>> 右移操作符
注意:移位操作符的操作数只能是整数,不仅被移的数要是整数,被移的个数也要是整数,并且不要移动负数位,这个是标准未定义的
移位规则:左边抛弃,右边补0
右移操作符(>>)位操作符(& | ^)右移操作符分为两种:
1.逻辑移位 左边补0,右边丢弃
2.算术移位 左边补原符号位,右边丢弃
一般情况下是算数右移
位操作符有:&(按位与)
|(按位或)
^(按位异或)
注意:它们的操作数必须是整数
&:二进制下相同位数为1则为1,不相同则为0
|:二进制下相同位数至少有一个是1则为1,没有一个1则为0
^:二进制下相同位数相同为0,相异为1
赋值操作符( = )赋值操作符的运算顺序是从右往左,并且可以连续赋值。
注意与==区分开来
复合赋值符+=、*=、/=、%=、&= ......
单目操作符!、-、+、&、sizeof、~、--、++、*、强制类型转换......
即只有一个操作数的操作符就叫单目操作符
关系操作符(> < >= <= != ==)注意区分 = 与 ==
逻辑操作符(&& ||)&&:逻辑与
||:逻辑或
注意逻辑与、逻辑或的短路问题
逻辑与从前往后若遇到一个条件为假,则后面的都不执行了
逻辑或从前往后若遇到一个条件为真,则后面都不执行了
条件操作符例如:a>b?a:b;相当于if(a>b)则选择a
注意:尽量带括号来防止优先级和结合性带来的错误
逗号表达式exp1,exp2,exp3,exp4,exp5...expN
逗号表达式从左往右依次执行,整个表达式的结果是最后一个表达式的结果,但是中途该有的表达式运算还是有的
下标引用、函数调用和访问结构体成员 下标引用操作符([ ])int arr[10];//创建数组 arr[9] = 10;//实用下标引用操作符。 [ ]的两个操作数是arr和9。函数调用操作符
#include访问结构体成员操作符void test1() { printf("hehen"); } void test2(const char *str) { printf("%sn", str); } int main() { test1(); //实用()作为函数调用操作符。 test2("hello bit.");//实用()作为函数调用操作符。 return 0; }
. 结构体.成员名
-> 结构体指针->成员名
#include表达式求值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; }
表达式求值的顺序是由操作符的优先级和结合性决定的



