[C语言]__操作符和表达式简单介绍__
2017-10-19 13:04
225 查看
操作符和表达式
1. 算数操作符
加“+”:把两个操作数相加。
减“-”:从第一个操作数中减去第二个操作数。
乘“*”:把两个操作数相乘。
除“/”:两个操作数相除。
取模(求余)“%”:整除后取余数。
注意:
①%不能对浮点数进行取模,只能对整数。而其他的均可以对浮点数进行操作。
②/操作分为整数除法和浮点数除法。
2. 移位操作符
左移操作符<<:表示二进制序列向左移动规定位数,最高位丢弃,最低位补0。
右移操作符>>:表示二进制序列向右移动规定位数,分为算术右移和逻辑右移。
算数右移:右边丢弃,左边补符号位。
逻辑右移:右边丢弃,左边补0。
注意:
①左移操作相当于给操作数乘2。
②右移操作(不论是算数还是逻辑)相当于给操作数除2。
警告:
①对于移位运算符,不要移动负数位,这个是标准未定义的。
3. 位操作符
按位与“&”:二进制序列按位与操作,同时为1才为1。
按位或“|”:二进制序列按位或操作,同时为0才为0。
按位异或“^”:二进制序列按位异或操作,相同为0,相异为1。
可以实现不创建第三个变量就实现两个数的交换。
注意:
①位操作符的操作数必须为整数。
4. 赋值操作符
基本的赋值运算符是“=”
注意:
①int a=1;初始化
A=2;赋值
这两个“=”代表的意思不一样。
复合赋值符:
加且赋值“+=”: C+=A相当于C=C+A。
减且赋值“-=”: C-=A相当于C=C-A。
乘且赋值“*=”: C*=A相当于C=C*A。
除且赋值“/=”: C/=A相当于C=C/A。
求模且赋值“%/”: C%=A相当于C=C%A。
左移且赋值“<<=”: C<<=1相当于C=C<<1。
右移且赋值“>>=”: C>>=1相当于C=C>>1。
按位与且赋值“&=”: C&=1相当于C=C&1。
按位异或且赋值“^=”: C^=A相当于C=C^1。
按位或且赋值“|=”: C|=A相当于C=C|1。
5. 单目操作符
逻辑反操作“!”:逻辑反操作,用来逆转操作数逻辑状态。
Int flag=1; !flag=0;
负值“-”:表示一个数为负值。
正值“+”:表示一个数为正值。
取地址“&”:返回变量的地址。
printf(“%p ”,&a);打印a的地址。
printf(“%p “,&arr);打印数组arr的地址。
printf(“%p “,arr);打印数组arr的首元素地址。
printf(“%p “,&arr+1);打印数组arr加了40后的地址。
printf(“%p “,arr+1);打印数组arr加了4的地址。
操作数的类型长度“sizeof”:求取操作数的类型长度。以字节为单位。
注意:
①sizeof(a) 和 sizeof a均可以执行,证明sizeof不是函数。
②数组名单独放在sizeof内部,数组名表示整个数组。
③sizeof内部的表达式不计算。
④sizeof(类型)一定要加括号,不可省略。
对一个数的二进制按位取反“~”:
注意:
①符号位也要取反。
前置、后置减减“--”:自减运算符。
注意:
①前置--:先--,再使用。
②后置--:先使用,再--。
前置、后置加加“++”:自增运算符。
注意:
①前置++:先++,再使用。
②后置++:先使用,再++。
补充:
①指针++:
prinft(“%p ”,p);0x0012ff40
printf(“%p ”,++p);0x0012ff44 相当于加上了1*sizeof(指针类型)的值
直接访问(解引用)操作符“*”:
注意:
①int * p=&a; *是定义指针类型时的规定,不是解引用操作符。
*p=20; *为解引用操作符。
强制类型转换“(类型)”:当操作数的类型不同,而且不属于基本数据类型时,经常需要将操作数转化为所需要的类型。
6. 关系操作符
大于“>”:a大于b时返回真;否则返回假。
小于“<”:a小于b时返回真;否则返回假。
大于等于“>=”:a大于等于b时返回真;否则返回假。
小于等于“<=”:a小于等于b时返回真;否则返回假。
不等于“!=”:a不等于b时返回真;否则返回假。
等于“==”:a等于b时返回真;否则返回假。
注意:
①不要将==和=的作用混为一谈。
②关系运算符的值只能是0或1。
③关系运算符的值为真时,结果值都为1。
④关系运算符的值为假时,结果值都为0。
7. 逻辑操作符
逻辑与“&&”:只有两个操作数都是true,结果才是true。但是如果左边操作数为false,就不计算右边的表达式,直接得出false(左边为假后边不用算)。
逻辑或“||”:如果一个操作数或多个操作数为 true,则逻辑或运算符返回布尔值 true;只有全部操作数为false,结果才是 false。仅当第一个操作数的计算结果为 false 时计算第二个操作数(左边为真后面不用算)。
8. 条件操作符(三目操作符)
<表达式1> ? <表达式2> : <表达式3>;
"?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。
9. 逗号表达式
逗号表达式“,”:它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。
注意:
①逗号表达式的运算过程为:从左往右逐个计算表达式。
②逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。
③逗号运算符的优先级别在所有运算符中最低。
10. 下标引用
“[]”:操作数:一个数组名+一个索引值。
11. 函数调用
“()”:一般形式为:函数名(实际参数表)。
注意:
①对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
②字符函数引用即对引用有关库函数或自定义函数函数。
12. 结构成员
. 结构体.成员名
-> 结构体指针->成员名
附:
运算符优先级
1. 算数操作符
加“+”:把两个操作数相加。
减“-”:从第一个操作数中减去第二个操作数。
乘“*”:把两个操作数相乘。
除“/”:两个操作数相除。
取模(求余)“%”:整除后取余数。
注意:
①%不能对浮点数进行取模,只能对整数。而其他的均可以对浮点数进行操作。
②/操作分为整数除法和浮点数除法。
2. 移位操作符
左移操作符<<:表示二进制序列向左移动规定位数,最高位丢弃,最低位补0。
右移操作符>>:表示二进制序列向右移动规定位数,分为算术右移和逻辑右移。
算数右移:右边丢弃,左边补符号位。
逻辑右移:右边丢弃,左边补0。
注意:
①左移操作相当于给操作数乘2。
②右移操作(不论是算数还是逻辑)相当于给操作数除2。
警告:
①对于移位运算符,不要移动负数位,这个是标准未定义的。
3. 位操作符
按位与“&”:二进制序列按位与操作,同时为1才为1。
按位或“|”:二进制序列按位或操作,同时为0才为0。
按位异或“^”:二进制序列按位异或操作,相同为0,相异为1。
可以实现不创建第三个变量就实现两个数的交换。
注意:
①位操作符的操作数必须为整数。
4. 赋值操作符
基本的赋值运算符是“=”
注意:
①int a=1;初始化
A=2;赋值
这两个“=”代表的意思不一样。
复合赋值符:
加且赋值“+=”: C+=A相当于C=C+A。
减且赋值“-=”: C-=A相当于C=C-A。
乘且赋值“*=”: C*=A相当于C=C*A。
除且赋值“/=”: C/=A相当于C=C/A。
求模且赋值“%/”: C%=A相当于C=C%A。
左移且赋值“<<=”: C<<=1相当于C=C<<1。
右移且赋值“>>=”: C>>=1相当于C=C>>1。
按位与且赋值“&=”: C&=1相当于C=C&1。
按位异或且赋值“^=”: C^=A相当于C=C^1。
按位或且赋值“|=”: C|=A相当于C=C|1。
5. 单目操作符
逻辑反操作“!”:逻辑反操作,用来逆转操作数逻辑状态。
Int flag=1; !flag=0;
负值“-”:表示一个数为负值。
正值“+”:表示一个数为正值。
取地址“&”:返回变量的地址。
printf(“%p ”,&a);打印a的地址。
printf(“%p “,&arr);打印数组arr的地址。
printf(“%p “,arr);打印数组arr的首元素地址。
printf(“%p “,&arr+1);打印数组arr加了40后的地址。
printf(“%p “,arr+1);打印数组arr加了4的地址。
操作数的类型长度“sizeof”:求取操作数的类型长度。以字节为单位。
注意:
①sizeof(a) 和 sizeof a均可以执行,证明sizeof不是函数。
②数组名单独放在sizeof内部,数组名表示整个数组。
③sizeof内部的表达式不计算。
④sizeof(类型)一定要加括号,不可省略。
对一个数的二进制按位取反“~”:
注意:
①符号位也要取反。
前置、后置减减“--”:自减运算符。
注意:
①前置--:先--,再使用。
②后置--:先使用,再--。
前置、后置加加“++”:自增运算符。
注意:
①前置++:先++,再使用。
②后置++:先使用,再++。
补充:
①指针++:
prinft(“%p ”,p);0x0012ff40
printf(“%p ”,++p);0x0012ff44 相当于加上了1*sizeof(指针类型)的值
直接访问(解引用)操作符“*”:
注意:
①int * p=&a; *是定义指针类型时的规定,不是解引用操作符。
*p=20; *为解引用操作符。
强制类型转换“(类型)”:当操作数的类型不同,而且不属于基本数据类型时,经常需要将操作数转化为所需要的类型。
6. 关系操作符
大于“>”:a大于b时返回真;否则返回假。
小于“<”:a小于b时返回真;否则返回假。
大于等于“>=”:a大于等于b时返回真;否则返回假。
小于等于“<=”:a小于等于b时返回真;否则返回假。
不等于“!=”:a不等于b时返回真;否则返回假。
等于“==”:a等于b时返回真;否则返回假。
注意:
①不要将==和=的作用混为一谈。
②关系运算符的值只能是0或1。
③关系运算符的值为真时,结果值都为1。
④关系运算符的值为假时,结果值都为0。
7. 逻辑操作符
逻辑与“&&”:只有两个操作数都是true,结果才是true。但是如果左边操作数为false,就不计算右边的表达式,直接得出false(左边为假后边不用算)。
逻辑或“||”:如果一个操作数或多个操作数为 true,则逻辑或运算符返回布尔值 true;只有全部操作数为false,结果才是 false。仅当第一个操作数的计算结果为 false 时计算第二个操作数(左边为真后面不用算)。
8. 条件操作符(三目操作符)
<表达式1> ? <表达式2> : <表达式3>;
"?"运算符的含义是:先求表达式1的值,如果为真,则执行表达式2,并返回表达式2的结果;如果表达式1的值为假,则执行表达式3,并返回表达式3的结果。
9. 逗号表达式
逗号表达式“,”:它将两个及其以上的式子联接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。
注意:
①逗号表达式的运算过程为:从左往右逐个计算表达式。
②逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。
③逗号运算符的优先级别在所有运算符中最低。
10. 下标引用
“[]”:操作数:一个数组名+一个索引值。
11. 函数调用
“()”:一般形式为:函数名(实际参数表)。
注意:
①对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
②字符函数引用即对引用有关库函数或自定义函数函数。
12. 结构成员
. 结构体.成员名
-> 结构体指针->成员名
附:
运算符优先级
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | 后置++ | 后置自增运算符 | 变量名++ | 左到右 | |
后置-- | 后置自减运算符 | 变量名-- | |||
[ ] | 数组下标 | 数组名[整型表达式] | |||
( ) | 圆括号 | (表达式)/函数名(形参表) | |||
. | 成员选择(对象) | 对象.成员名 | |||
-> | 成员选择(指针) | 对象指针->成员名 | |||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
(类型) | 强制类型转换 | (数据类型)表达式 | |||
前置++ | 前置自增运算符 | ++变量名 | 单目运算符 | ||
前置-- | 前置自减运算符 | --变量名 | 单目运算符 | ||
* | 取值运算符 | *指针表达式 | 单目运算符 | ||
& | 取地址运算符 | &左值表达式 | 单目运算符 | ||
! | 逻辑非运算符 | !表达式 | 单目运算符 | ||
~ | 按位取反运算符 | ~表达式 | 单目运算符 | ||
sizeof | 长度运算符 | sizeof 表达式/sizeof(类型) | |||
3 | * | 乘 | 表达式*表达式 | 左到右 | 双目运算符 |
/ | 除 | 表达式/表达式 | 双目运算符 | ||
% | 余数(取模) | 整型表达式%整型表达式 | 双目运算符 | ||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | 双目运算符 | ||
5 | << | 左移 | 表达式<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 表达式>>表达式 | 双目运算符 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 双目运算符 | ||
< | 小于 | 表达式<表达式 | 双目运算符 | ||
<= | 小于等于 | 表达式<=表达式 | 双目运算符 | ||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | 双目运算符 | ||
8 | & | 按位与 | 整型表达式&整型表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 整型表达式^整型表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 整型表达式|整型表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | |
/= | 除后赋值 | 变量/=表达式 | |||
*= | 乘后赋值 | 变量*=表达式 | |||
%= | 取模后赋值 | 变量%=表达式 | |||
+= | 加后赋值 | 变量+=表达式 | |||
-= | 减后赋值 | 变量-=表达式 | |||
<<= | 左移后赋值 | 变量<<=表达式 | |||
>>= | 右移后赋值 | 变量>>=表达式 | |||
&= | 按位与后赋值 | 变量&=表达式 | |||
^= | 按位异或后赋值 | 变量^=表达式 | |||
|= | 按位或后赋值 | 变量|=表达式 | |||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | 从左向右顺序运算 |
相关文章推荐
- 7_21|C语言|操作符注意事项|sizeof使用讲解|结构体简单介绍
- c语言有关操作符(运算符)的简单介绍
- C语言操作符简单介绍
- c语言中的冒泡排序简单介绍
- JSON的简单介绍以及C语言的JSON库使用
- C语言(四) 操作符和表达式(下)
- C语言的表达式和操作符
- c语言中函数的简单介绍
- c语言学习之基础知识点介绍(四):算术运算符和逗号表达式
- JavaScript正则表达式的简单介绍和一些小例子(一)
- 从头认识Spring-1.14 SpEl表达式(1)-简单介绍与嵌入值
- Java中操作符使用的简单介绍
- 0602 c语言操作符和表达式
- 正则表达式的简单介绍和string.replace的用法
- 【C#基础知识】之常量、变量、枚举、字符串、转义符、运算符及表达式、try...catch等简单介绍
- c语言中函数的简单介绍
- oracle的正则表达式(regular expression)简单介绍从oarcle10g开始支持
- 简单开发过程介绍(C语言)
- C语言中strand() rand() time()函数的简单介绍及获取随机数的方法
- 正则表达式的简单介绍