C语言的操作符分为:算术操作符、移位操作符、位操作符、赋值、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号操作符、下标引用、函数调用和结构成员等,在这简单介绍下这几种操作符。
1、算术操作符:+、- 、* 、/、%
其中‘%’只接受两个整型操作数,其返回的值是余数而不是商。除了‘%’,其他的操作符既适用于浮点型又适用于整数类型。当‘/’操作符的两个操作数都是整数时,他执行整数运算,在其他情况下执行浮点数除法。
2、移位操作符:简单的把一个值的位向左或向右移动。
- 在左移位中,最左边的几位被丢弃,右边多出的几个空位由0补齐。左移位操作符为:<<
1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
向左移3位 逻辑移位
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
向左移3位 算术移位
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
- 右操作符存在一个左操作符不曾面临的问题。从左边移入新位时,有两种选择方案:逻辑移位(左边移入新位全用0补充)、算术移位(左边移入的位由原先该值的符号位决定,符号位位1则移入的位均为1,符号位为0则移入的位均为0)。右移位操作符为:>>。
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
向右移3位 逻辑移位
0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |
向右移3位 算术移位
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
移位操作符的左操作数的值将移动由右操作数指定的位数,两个操作数必须为整数。如:6<<4,6表示的二进制数向左移动4位。
0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
向右移3位 逻辑移位
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
向右移3位 算术移位
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
3、位操作符:对他们的操作数的各位执行AND、OR、XOR等逻辑操作
AND(&):两个位数都是1,结果为1,否则为0;
OR(|):两个位都是0,结果为0,否则为1;
XOR(^):两个位上的数不同结果为1,否则为0。
他们要求的操作数为整数类型。
如:
&(与操作符) | 0 | 1 |
0 | 0 | 0 |
1 | 0 | 1 |
|(或操作符) | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 1 |
^(异操作符) | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |
4、赋值:把右操作数的值存储于左操数;赋值操作符的求值顺序是从右到左。
如:a=b=c+2 等同于 a=(b=c+2)
复合赋值符:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=
上面的复合操作符运算类似于’+=‘操作符。如a+=2等同于a=a+2,a<<=2等同于a=a<<2;
5、单目操作符:只接受一个操作数。它们是:
!:逻辑反操作,操作数为真,结果为0,操作数为假,结果为1;如 :!7=0。
~:对整型类的操作数进行求补操作,操作数中原先为1的为变为0;原先为0的变为。
&:产生它操作数的地址。如 int a,*b; b=&a; &操作符取a的地址赋值给指针变量b。
* :间接访问操作符,与指针一起使用,用于访问指针所指向得值。如上面一行的代码,表达式b的值是变量a的地址,但表达式*b的值则是变量a得值
sizeof:判断它操作数的类型长度。
(类型):强制类型转换符,用于显示的把一种类型转换为另外一种类型。如:
int a;
(float)a;
把整型变量a转换为浮点型。
+、-:产生操作数的正负值
++、--:操作数的值被增加或减少1。
6、关系操作符:>, >=, <, <=, !=, ==
关系操作符的值是整数,而不是布尔值,他可以赋值给整型变量,通常用于if或while语句中,作为测值表达式
7、逻辑操作符:&&,||
&&操作符的优先级较低,&&操作符总是首先进行左操作数求值,如果值为真,然后紧接着对右操作数进行求值。如果左操作数求值为假,就不再进行右操作数。||操作符也是先求左操作数,如果为真就不进行右操作符求值。
8、条件操作符:条件操作符接受三个参数;用法如下:
表达式1?表达式2:表达式3
首先计算表达式1的值,为真整个表达式的值为表达式2的值,不计算表达式3的值;为假则为表达式3的值,不计算表达式2的值
9、逗号操作符:用于将两个或多个表达式分隔开来,这些表达式自左向右求值,整个逗号的表达式的值为最后那个表达式的值。用法:
表达式1,表达式2,表达式3,.......表达式n
10、下标引用、函数调用和结构成员
下标引用:常用于数组、指针
函数操作符接受一个或多个操作数,第一个操作数是你希望调用的函数名,剩余的操作数是传递给函数的参数
结构成员: . 和 -> 用于访问一个结构的成员。如果是个结构变量,那么s.a就是访问结构s中名叫a的成员。当遇到一个指向结构的指针,访问他的成员需要用 ->