C语言操作符
操作符
分类:
算数操作符 移位操作符 位操作符 赋值操作符 单目操作符
关系操作符 逻辑操作符 条件操作符 逗号表达式
下标应用 函数调用 结构成员
算数操作符
+ - * / %
1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数.
2.对于 / 操作符如果两个操作数都为整数,执行整数除法.而只要有浮点数执行的就是浮点数除法.
3.% 操作符的两个操作数必须为整数.返回的是整除之后的余数.
移位操作符
<< 左移操作符 >> 右移操作符
左移操作符 移位规则: 左边抛弃,右边补 0 .
右移操作符 移位规则: 1> 有符号整数右移称算数移位,最高位补符号位,右边丢弃 2>无符号整数右移称逻辑移位,最高位补0,右边丢弃
注意:对于移位运算符,不要移动负数位,这个是标准未定义的
位操作符
& 按位与
| 按位或
^ 按位异或
注: 他们的操作数必须是整数.
赋值操作符
赋值操作符是一个很棒的操作符,他可以然你得到一个你之前不满意的值,也就是你可以给自己重新赋值.
包括复合赋值符
+=
*=
/=
%=
>>=
<<=
&=
|=
^=
单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置,后置--
++ 前置,后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
关系操作符
>
>=
<
<=
!= 用于测试"不相等"
== 用于测试"相等"
逻辑操作符
&& 逻辑与
|| 逻辑或
条件操作符
exp1?exp2:exp3 //若表达式exp1为真,输出exp2,反之输出exp3
逗号表达式
exp1,exp2,exp3....
逗号表达式,就是用逗号隔开的多个表达式,从左向右依次执行.整个表达式的结果是最后一个表达式的结果
小标引用,函数调用和结构成员
1.[ ] 下标引用操作符
操作数: 一个数组名+ 一个索引值
2.( ) 函数调用操作符,接受一个或者多个操作数: 第一个操作数是函数名,剩余的操作数就是传递给函数的参数
3.访问一个结构的成员
结构体.成员名 或者 结构体指针->成员名
表达式求值
表达式求值的顺序一部分是由操作符的优先级和结核性决定,
同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型
隐式类型转换
C的整形算术运算总是以缺省整型类型的精度来进行的.
为了获得这个精度,表达式中的字符和短整型操作数在使用之前转换为普通整型,这种转换称为整型提升.
/*********************
*1.整形提升,char short 运算时提升成int
**********************/
//#include<stdio.h>
//#include<stdlib.h>
//int main()
//{
// char c = 0xb6;
// short s = 0xb600;
// int i = 0xb6000000;
// if (c == 0xffffffb6)
// printf("c\n");
// if (s == 0xffffb600)
// printf("s\n");
// if (i == 0xb6000000)
// printf("i\n");
// system("pause"); //输出c,s,i 即char short 在运算时提升为int 型,高位补符号位
// return 0;
//}
算术转换
如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行,
下面的层次体系称为寻常算数转换
long double
double
float
unsigned long int
long int
unsigned int
int
如果某个操作数的类型在上面的这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算.
操作符的属性
复杂表达式的求值有三个影响的因素
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
操作符 |
描述 |
用法示例 |
结果类型 |
结合 性 |
是否控制求值顺 序 |
() |
聚组 |
(表达式) |
与表达式 同 |
N/A |
否 |
() |
函数调用 |
rexp(rexp,...,rexp) |
rexp |
L-R |
否 |
[ ] |
下标引用 |
rexp[rexp] |
lexp |
L-R |
否 |
. |
访问结构成员 |
lexp.member_name |
lexp |
L-R |
否 |
-> |
访问结构指针成员 |
rexp->member_name |
lexp |
L-R |
否 |
++ |
后缀自增 |
lexp ++ |
rexp |
L-R |
否 |
-- |
后缀自减 |
lexp -- |
rexp |
L-R |
否 |
! |
逻辑反 |
! rexp |
rexp |
R-L |
否 |
~ |
按位取反 |
~ rexp |
rexp |
R-L |
否 |
+ |
单目,表示正值 |
+ rexp |
rexp |
R-L |
否 |
- |
单目,表示负值 |
- rexp |
rexp |
R-L |
否 |
++ |
前缀自增 |
++ lexp |
rexp |
R-L |
否 |
-- |
前缀自减 |
-- lexp |
rexp |
R-L |
否 |
* |
间接访问 |
* rexp |
lexp |
R-L |
否 |
& |
取地址 |
& lexp |
rexp |
R-L |
否 |
sizeof |
取其长度,以字节表 示 |
sizeof rexp sizeof(类 型) |
rexp |
R-L |
否 |
(类 型) |
类型转换 |
(类型) rexp |
rexp |
R-L |
否 |
* |
乘法 |
rexp * rexp |
rexp |
L-R |
否 |
/ |
除法 |
rexp / rexp |
rexp |
L-R |
否 |
% |
整数取余 |
rexp % rexp |
rexp |
L-R |
否 |
+ |
加法 |
rexp + rexp |
rexp |
L-R |
否 |
- |
减法 |
rexp - rexp |
rexp |
L-R |
否 |
<< |
左移位 |
rexp << rexp |
rexp |
L-R |
否 |
>> |
右移位 |
rexp >> rexp |
rexp |
L-R |
否 |
> |
大于 |
rexp > rexp |
rexp |
L-R |
否 |
>= |
大于等于 |
rexp >= rexp |
rexp |
L-R |
否 |
操作符 |
描述 |
用法示例 |
结果类型 |
结合 性 |
是否控制求值顺 序 |
< |
小于 |
rexp < rexp |
rexp |
L-R |
否 |
<= |
小于等于 |
rexp <= rexp |
rexp |
L-R |
否 |
== |
等于 |
rexp == rexp |
rexp |
L-R |
否 |
!= |
不等于 |
rexp != rexp |
rexp |
L-R |
否 |
& |
位与 |
rexp & rexp |
rexp |
L-R |
否 |
^ |
位异或 |
rexp ^ rexp |
rexp |
L-R |
否 |
| |
位或 |
rexp | rexp |
rexp |
L-R |
否 |
&& |
逻辑与 |
rexp && rexp |
rexp |
L-R |
是 |
|| |
逻辑或 |
rexp || rexp |
rexp |
L-R |
是 |
?: |
条件操作符 |
rexp ? rexp : rexp |
rexp |
N/A |
是 |
= |
赋值 |
lexp = rexp |
rexp |
R-L |
否 |
+= |
以...加 |
lexp += rexp |
rexp |
R-L |
否 |
-= |
以...减 |
lexp -= rexp |
rexp |
R-L |
否 |
*= |
以...乘 |
lexp *= rexp |
rexp |
R-L |
否 |
/= |
以...除 |
lexp /= rexp |
rexp |
R-L |
否 |
%= |
以...取模 |
lexp %= rexp |
rexp |
R-L |
否 |
<<= |
以...左移 |
lexp <<= rexp |
rexp |
R-L |
否 |
>>= |
以...右移 |
lexp >>= rexp |
rexp |
R-L |
否 |
&= |
以...与 |
lexp &= rexp |
rexp |
R-L |
否 |
^= |
以...异或 |
lexp ^= rexp |
rexp |
R-L |
否 |
|= |
以...或 |
lexp |= rexp |
rexp |
R-L |
否 |
, |
逗号 |
rexp,rexp |
rexp |
L-R |
|
上一篇: WPF 去掉标题栏图标
推荐阅读
-
asp.net c# 对GridView编辑,删除,更新,取消的操作
-
Codeforces Round #259 (Div. 2) A B C 三连发_html/css_WEB-ITnose
-
C#五、(委托的用法和为什么需要委托?)
-
c#中的实现php中的preg_replace
-
嵌入式C语言自我修养 03:宏构造利器:语句表达式
-
近期.NET学习及项目开发整理-SQLSERVER中的数据类型和C#中数据类
-
Codeforces Round #281 (Div. 2) (A、B、C、D题)_html/css_WEB-ITnose
-
SQL语言查询基础:连接查询 联合查询 代码
-
C#开发微信门户及应用(五)之用户分组信息管理
-
PHP 不如 C++ 吗?_PHP教程