目录
操作符主要分为:
1、算术操作符
2、移位操作符
<< 左移操作符 >> 右移操作符
左移操作符的移位规则:左边的抛弃、右边的空位由0补足。
右移操作符的移位规则分为两种:
1、逻辑移位:左边空位用0补足,右边的直接丢弃。
2、算术移位:左边用符号补足,右边的直接丢弃。
警告:对于移位运算符,不要移动负数位,这个是标准未定义的。
3、位操作符
& --按位与 | --按位或 ^ --按位异或
按位与是两个二进制代码如果对应位上的数字都为1,那么得1,否就得0。
按位或是两个二进制代码如果对应位上的数字有一个为1,那么得1,否则得0。
按位异或是两个二进制代码如果互不相同,那么得1,否则得0。
这道题中b最后和a的数值是互换了,因为a^a^b=b , b^b^a=a。两个相同的数字异或是0
4、赋值操作符
我们通常用=号来给变量赋值。
复合赋值符:
5、单目操作符
值得一提的是,++和--符分为前置和后置,前置是先使用后操作,后置是先操作后使用。
例如:
int a=10; int b=a++; printf("%d %d\n",a,b);
这其中打印的b的值为10,而a为11
就是因为在先使用了a赋值给b再实现自增。
强制类型转换()的使用方法:
这样得到的a是3
6、关系操作符
注意:很多人在比较的时候容易将“==”打成“=”,这样就由比较变成赋值了,是一个比较容易犯的错误。
7、逻辑操作符
&& --逻辑与 || --逻辑或
360曾经的一道笔试题
输出的结果是1 2 3 4和 1 3 3 4
因为逻辑与在从左向右判断的时候碰到假项后就不再执行。
逻辑后则是再判断的时候碰到真项之后就不再判断。
8、条件操作符
如果表达式1成立那么实现表达式2,否则实现表达式3。
9、逗号表达式
exp1, exp2, exp3, …expN
从左向右执行
10、下表引用、函数调用和结构成员
1、下标引用操作符 [ ]
int arr[10];//创建数组 arr[9] = 10;//实用下标引用操作符。 [ ]的两个操作数是arr和9。
数组名传的是第一个下标,所以
上面两行打印效果相同,都是打印了同一个地址
上面的效果也相同,都是打印了同一个元素。
函数操作符()
在函数名之后
#include <stdio.h> void test1() { printf("hehe\n"); } void test2(const char *str) { printf("%s\n", str); } int main() { test1(); //实用()作为函数调用操作符。 test2("hello bit.");//实用()作为函数调用操作符。 return 0; }
结构成员访问
#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; }