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("hehe\n");
- }
- void test2(const char *str)
- {
- printf("%s\n", 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;
- }
表达式求值的顺序是由操作符的优先级和结合性决定的