C语言学习总结:操作符
C语言中有各种各样的操作符。那些操作符可分为这几类:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符和逗号表达式。
算数操作符
+ - * / %
1. +,-,*,/ 这几个操作符可以作用于整数和浮点数。
2. % 表示除余运算,只能作用于整数,结果是整除之后的余数。
移位操作符
<< >>
1. << 左移操作符
左边抛弃,右边补零
例:int num = 10;
num<<1;
上图为num在内存中的二进制和左移后的结果。最左边的0左移后被丢弃,右边补一个0。int型存32字节,所以最左边的0只能被丢弃,丢弃以后不能再被找回。现在num由10变成了20,所以左移一位由乘2的效果。以此类推,若左移n位,就有乘2^n的效果。
2. >> 右移操作符
分为两种:逻辑移位:左边用0填充,右边丢弃
算术移位:左边用原该值的符号位填充,右边丢弃
注意:内存中存储的二进制是补码,正数的原码与补码相同,负数的原码与补码不同。
注意负数之间原码与补码的计算。
对于移位运算符不要移动负数位,这个是标准未定义的。
位操作符
& | ^
1. & 按位与:全1为1,其余为0
2. | 按位或:全0为0,其余为1
3. ^ 按位异或:相同为0,不同为1
例:
这三个操作符的操作数都必须是整数。
运算过程是这样的:它们先自动在计算机里转化为二进制,然后每位进行与,或,异或运算,再自动转化为十进制,打印出来。
赋值操作符
= += -= *= /= %= >>= <<= &= |= ^=
这些运算符都可以写成复合的效果。
例: int x = 20;
x = x + 20;
x += 20; //复合赋值
单目操作符
! - + & sizeof ~ -- ++ * (类型)
1. ! 逻辑反操作
例:printf("%d\n",!2);
打印结果为0
零代表假,非零代表真,所以2代表的是真,非2自然为假,输出0。
2. - 负值
3. + 正值
4. & 取地址:可用于scanf语句中,也会在指针运算中用到。
5. sizeof 操作数的类型长度(以字节为单位)
例:
sizeof可以求变量所占空间的大小,也可以求类型所占空间的大小,但注意,类型一定要加括号。
6. ~ 对一个数的二进制按位取反
7. -- 前置--,后置--
8. ++ 前置++,后置++
9. * 间接访问操作符(解引用操作符):用于指针
10. (类型) 强制类型转换
关系操作符
> >= < <= != ==
这些运算符都较为简单。分别为大于,大于等于,小于,小于等于,不等于和等于。
注意:赋值运算符与等于的区别。
逻辑操作符
&& ||
1. && 逻辑与:两个均为真则为真,其余为假
2. || 逻辑或:一个为假则为假,其余为真
区分逻辑与和按位与,逻辑或和按位或
1&2---------->0
1&&2-------->1
1|2----------->3
1||2---------->1
条件操作符
exp1 ? exp2 : exp3
若exp1成立,则执行exp2;反之,则执行exp3。
例:
逗号表达式
exp1,exp2,exp3,……expN
从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
例: