C语言操作符总结
2018-03-31 11:55
525 查看
一.分类
操作符的分类主要有:
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
二.(1)算术操作符
+ 加 -减 * 乘 / 除 %取余
注意:
①除了%操作符之外,其他的几个操作符都可以作用于整数和浮点数。
②对于/操作符而言,如果两个操作数均为整数,那么执行整数除法。而两个操作数中只要有一个是浮点数,那么执行的就是浮点数除法,结果即为浮点数。
③%操作符的两个操作符必须均为整数。返回的数值是整除之后的余数。
(2)移位操作符
<< 左移操作符 >>右移操作符
<<表示为二进制形式最左边的数抛弃,最右边的数字补上0。
>>右移操作符分为逻辑右移(左边用0填充,右边丢弃)和算术右移(左边符号位不变,右边丢弃)
(3)位操作符
&按位与 | 按位或 ^按位异或
&是对两个操作数的二进制形式逐位比较,只有该位上两个数均为1时得结果1,其余均为0。
|是对两个操作数的二进制形式逐位比较,只有该位上两个数均为0时得结果0,其余均为1。
^是对两个操作数的二进制形式逐位比较,若相同得0,不同得1。A,B异或的值,与A异或得B,与B异或得A。
(4)赋值操作符=
它可以将右边的值赋给左边的值。注意最好不要连续赋值,分开写有利于理解和后期程序调试。
(4)复合赋值符
+= -= *= /= %= >>= <<= &= |=
复合赋值符是一种更加简洁的写法,与其他运算符同理。
比如说a+=b就是我们平时所写的
a=a+b 剩下的操作符意思类似。
(5)单目操作符
!逻辑反操作
-负
+ 正
& 取地址操作
~表示对一个数的二进制按位取反
-- 自减 ,如果前置的话就先赋值后使用,如果后置的话就先使用后赋值
++ 自增,如果前置的话就先赋值后使用,如果后置的话就先使用后赋值
* 间接访问
(类型) 用来强制转换变量的类型
sizeof 是用来求变量(类型)所占空间的大小的操作符,不是函数,sizeof内的表达式不参与运算。
注意:
”sizeof(数组名)“表示整个数组的大小,单位为字节。“&数组名”表示整个数组,只有这两种方式可以表示整个数组,其余表达方式均为数组的首元素地址。但”sizeof(数组名)“在函数传参的过程中不表示整个数组的大小,只有四个字节。
(6)关系操作符
> 大于 >= 大于等于 < 小于
<= 小于等于 ==等于 != 不等于
&&逻辑与 ||逻辑或
"&&",必须两个操作数均为真,返回结果才为真,如果第一个操作数为假,那么后面的操作则不执行。
“||”,只要有一个操作数为真,则返回结果为真,若第一个操作数为真则后面的操作不执行。
(7)条件操作符
exp1 ? exp2 : exp3
“exp1”为判断语句,如果判断结果为真,则执行“exp2” ,如果判断结果为假,执行“exp3”。
(8)逗号表达式exp1,exp2,exp3,...expN
用逗号隔开的多个表达式,从左到右依次执行。整个表达式的结果是最后一个表达式的结果。
(9)下标引用、函数调用和结构成员
“[ ]”即为下标引用操作,包含两个操作数分别为索引值和数组名。
“()”为函数调用符号,第一个操作数是函数名,剩余的操作数是传递给函数的参数。
“.”使用方法为“结构体.成员”,用于访问结构体中的成员。“->”的使用方法为“结构体指针->成员名”三. 表达式求值
表达式求值顺序一部分是由操作符优先级和结合性决定。但有些表达式的操作数在求值过程中可能需要转换成其他类型。
四.隐式类型转换
C的整型算数计算总是至少以缺省整形类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换成普通整型,这种转换称为“整型提升”。
五.算术转换
如果某个操作数属于不同类型,那么除非其中一个操作数转换成另外一个操作数的类型,否则操作无法执行。
六.操作符属性 复杂表达式求值有三个影响的因素:
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
操作符的分类主要有:
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
二.(1)算术操作符
+ 加 -减 * 乘 / 除 %取余
注意:
①除了%操作符之外,其他的几个操作符都可以作用于整数和浮点数。
②对于/操作符而言,如果两个操作数均为整数,那么执行整数除法。而两个操作数中只要有一个是浮点数,那么执行的就是浮点数除法,结果即为浮点数。
③%操作符的两个操作符必须均为整数。返回的数值是整除之后的余数。
(2)移位操作符
<< 左移操作符 >>右移操作符
<<表示为二进制形式最左边的数抛弃,最右边的数字补上0。
>>右移操作符分为逻辑右移(左边用0填充,右边丢弃)和算术右移(左边符号位不变,右边丢弃)
(3)位操作符
&按位与 | 按位或 ^按位异或
&是对两个操作数的二进制形式逐位比较,只有该位上两个数均为1时得结果1,其余均为0。
|是对两个操作数的二进制形式逐位比较,只有该位上两个数均为0时得结果0,其余均为1。
^是对两个操作数的二进制形式逐位比较,若相同得0,不同得1。A,B异或的值,与A异或得B,与B异或得A。
(4)赋值操作符=
它可以将右边的值赋给左边的值。注意最好不要连续赋值,分开写有利于理解和后期程序调试。
(4)复合赋值符
+= -= *= /= %= >>= <<= &= |=
复合赋值符是一种更加简洁的写法,与其他运算符同理。
比如说a+=b就是我们平时所写的
a=a+b 剩下的操作符意思类似。
(5)单目操作符
!逻辑反操作
-负
+ 正
& 取地址操作
~表示对一个数的二进制按位取反
-- 自减 ,如果前置的话就先赋值后使用,如果后置的话就先使用后赋值
++ 自增,如果前置的话就先赋值后使用,如果后置的话就先使用后赋值
* 间接访问
(类型) 用来强制转换变量的类型
sizeof 是用来求变量(类型)所占空间的大小的操作符,不是函数,sizeof内的表达式不参与运算。
注意:
”sizeof(数组名)“表示整个数组的大小,单位为字节。“&数组名”表示整个数组,只有这两种方式可以表示整个数组,其余表达方式均为数组的首元素地址。但”sizeof(数组名)“在函数传参的过程中不表示整个数组的大小,只有四个字节。
(6)关系操作符
> 大于 >= 大于等于 < 小于
<= 小于等于 ==等于 != 不等于
&&逻辑与 ||逻辑或
"&&",必须两个操作数均为真,返回结果才为真,如果第一个操作数为假,那么后面的操作则不执行。
“||”,只要有一个操作数为真,则返回结果为真,若第一个操作数为真则后面的操作不执行。
(7)条件操作符
exp1 ? exp2 : exp3
“exp1”为判断语句,如果判断结果为真,则执行“exp2” ,如果判断结果为假,执行“exp3”。
(8)逗号表达式exp1,exp2,exp3,...expN
用逗号隔开的多个表达式,从左到右依次执行。整个表达式的结果是最后一个表达式的结果。
(9)下标引用、函数调用和结构成员
“[ ]”即为下标引用操作,包含两个操作数分别为索引值和数组名。
“()”为函数调用符号,第一个操作数是函数名,剩余的操作数是传递给函数的参数。
“.”使用方法为“结构体.成员”,用于访问结构体中的成员。“->”的使用方法为“结构体指针->成员名”三. 表达式求值
表达式求值顺序一部分是由操作符优先级和结合性决定。但有些表达式的操作数在求值过程中可能需要转换成其他类型。
四.隐式类型转换
C的整型算数计算总是至少以缺省整形类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换成普通整型,这种转换称为“整型提升”。
五.算术转换
如果某个操作数属于不同类型,那么除非其中一个操作数转换成另外一个操作数的类型,否则操作无法执行。
六.操作符属性 复杂表达式求值有三个影响的因素:
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序