C语言的操作符总结
2018-04-06 17:21
525 查看
C语言的操作符有这么几类:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员。
1.算术操作符
+ - * / %
%操作符的两个操作数必须为整数,结算结果是整除之后的余数。除了%操作符之外,其他几个操作符可以作用于整数和浮点数。
/操作符的两个操作数都为整数,则执行整数除法、而只要有浮点数就执行浮点数除法。
2.移位操作符
<< 左移操作符
>> 算术右移操作符 >>> 逻辑右移操作符
<< 左移移位规则:左边抛弃、右边补0,这里要注意比如num<<1,num的值没有改变,因为没有赋值操作
>>右移移位规则:这个和左移有点区别,右移分为算术右移和逻辑右移两种
(1).逻辑右移用>>>表示,移位时,左边用0填充,右边丢弃
(2).算术右移用>> 表示,移位时,左边用该值的符号位填充,右边丢弃
警告!
对于移位运算符,不要移动负位数,这个是标准未定义的。
3.位操作符
& 按位与
| 按位或
^ 按位异或
注意:他们的操作数必须是整数
4.赋值操作符
= 就是它
复合赋值符:
+=、 -=、 *=、 /=、 %=、>>=、<<=、&=、|=、
5.单目操作符
! 逻辑反
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位) !!他是操作符,sizeof()并不是函数
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用)
(类型) 强制类型转换
6.关系操作符
>、>=、<、<=、!=、==
!!注意在if判断条件中不要只写一个=,和数字比较时最好把数字写在左边,以防出错,例如 if(5 == num)
7.逻辑操作符
&& 逻辑与
|| 逻辑或
8.条件操作符
exp1 ? exp2 : exp3 也叫三目操作符
例:
if(a > 5)
b = 2;
else
b = 5;
用三目操作符可以写成:
b = a > 5 ? 2 : 5;
9.逗号表达式
exp1,exp2,exp3,...,expN
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果
10.下标引用、函数调用和结构成员
(1). []
操作数:一个数组名 + 一个索引值
例:
int arr[22];
arr[4] = 34;
[] 的两个操作数是 arr 和 4
(2). ()
函数调用操作符,接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
(3). 访问一个结构的成员
. 结构体.成员名
-> 结构体指针-> 成员名
操作符的属性:
复杂表达式求值有三个影响因素:
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
1.算术操作符
+ - * / %
%操作符的两个操作数必须为整数,结算结果是整除之后的余数。除了%操作符之外,其他几个操作符可以作用于整数和浮点数。
/操作符的两个操作数都为整数,则执行整数除法、而只要有浮点数就执行浮点数除法。
2.移位操作符
<< 左移操作符
>> 算术右移操作符 >>> 逻辑右移操作符
<< 左移移位规则:左边抛弃、右边补0,这里要注意比如num<<1,num的值没有改变,因为没有赋值操作
>>右移移位规则:这个和左移有点区别,右移分为算术右移和逻辑右移两种
(1).逻辑右移用>>>表示,移位时,左边用0填充,右边丢弃
(2).算术右移用>> 表示,移位时,左边用该值的符号位填充,右边丢弃
警告!
对于移位运算符,不要移动负位数,这个是标准未定义的。
3.位操作符
& 按位与
| 按位或
^ 按位异或
注意:他们的操作数必须是整数
4.赋值操作符
= 就是它
复合赋值符:
+=、 -=、 *=、 /=、 %=、>>=、<<=、&=、|=、
5.单目操作符
! 逻辑反
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位) !!他是操作符,sizeof()并不是函数
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用)
(类型) 强制类型转换
6.关系操作符
>、>=、<、<=、!=、==
!!注意在if判断条件中不要只写一个=,和数字比较时最好把数字写在左边,以防出错,例如 if(5 == num)
7.逻辑操作符
&& 逻辑与
|| 逻辑或
8.条件操作符
exp1 ? exp2 : exp3 也叫三目操作符
例:
if(a > 5)
b = 2;
else
b = 5;
用三目操作符可以写成:
b = a > 5 ? 2 : 5;
9.逗号表达式
exp1,exp2,exp3,...,expN
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果
10.下标引用、函数调用和结构成员
(1). []
操作数:一个数组名 + 一个索引值
例:
int arr[22];
arr[4] = 34;
[] 的两个操作数是 arr 和 4
(2). ()
函数调用操作符,接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
(3). 访问一个结构的成员
. 结构体.成员名
-> 结构体指针-> 成员名
操作符的属性:
复杂表达式求值有三个影响因素:
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。