C语言提供了多种多样的操作符,这是很多人诟病它的一个缺点,但这使得它相比较于其它语言的操作符有着更大的价值,这也是C语言适用于开发范围极广的应用程序的原因之一。
1,算数操作符
C提供了所有常用的算数操作符: + - * / %
- 除了%操作符外,其余几个操作符既适用于浮点型友适用于整数类型。
- / 操作符的两个操作数都是整数时,执行整数运算,其它情况下执行浮点数除法。(如果整数运算的任一操作数为负值,运算的结果由编译器定义)
2,移位操作符
>> 右移操作符
<< 左移操作符 (有乘2的效果)
- 左移规则:左边抛弃,右边补0
- 右移规则:1逻辑移位(无符号值执行的移位都是逻辑移位,有符号值的移位取决于编译器)
左边用0填充,右边丢弃、
2,算数移位
左边用原值的符号位填充,右边丢弃
说明:移位运算符,不要移动负数位,标准未定义
3,位操作符 (操作数为整数)
& | ^
4,赋值
=
- 结合性:从右到左
复合赋值符
+= -= *= /= %=
<<= >>= &= ^= |=
- 优点:使源代码更加容易阅读和书写。
5,单目操作符
! ++ - & sizeof
~ -- + * (类型)
- ! 操作符对它的操作数进行逻辑取反操作,产生一个整形结果,0或1.
- ~ 对整数类型的操作数进行求补操作。
- - 产生操作数的负值。
- + 无实际意义,为了与- 操作符对称。
- & 产生它的操作数的地址。
- * 间接访问操作符,和指针一块使用,用于访问指针指向的值
- sizeof判断操作数的类型的长度,以字节为单位表示,操作数既可以是个表达式(sizeof x),也可以是两边加上括号的类型名 (sizeof (int))。当操作数是数组名时,返回数组的长度。
- (类型)即强制类型转换(cast),把表达式的值转换为另外的类型。
- ++和--都有两个变型,分别为前缀形式和后缀形式。
6,关系操作符
> >= < <= != ==
- 这些操作符产生的结果都是一个整形值,为0,则为假,为1,则为真。
7,逻辑操作符
&& ||
- 形式:expression1 && expression2,若两者都为真,则结果为真。
- 对于&操作符:如果左操作数为真,就再对右操作数进行求值;若左操作数为假,则右操作数就不再求值;
- 对于||操作符:首先对左操作数先求值,为真,则右操作数不再求值,
- 表达式的顺序必须保证正确。如非法代码:if (x>=0&&x<=MAX&&array[x]==0),,,这段代码会首先检查数组下标是否合法,若不合法,则会忽略该表达式,从而产生错误。
8,条件操作符
(expression1 ) ?( expression2 ) : ( expression3)
- 先计算expression1 ,为真,则表达式的值为expression2 ,否则为 expression3
9,逗号操作符
expression1 , expression2 ,.....,expression N
- 从左向右逐个进行求值,而整个逗号表达式的值就是最后那个表达式的值
10,下标引用、函数调用和结构成员
array[下标] . -> ()
- [ ] 操作数 :一个数组名 + 一个索引值。
- . 结构体 . 成员名。
- ->结构体指针 -> 成员名
这是我个人现阶段对C语言操作符的浅薄认识,颇有不足,所以再献上一篇技术大牛的博客及更详细的介绍。