操作符
1. 算数操作符
+ - * / %
除了%操作符外的操作符都既能用于整型也能用于浮点型,/操作符的一个操作数位浮点型,则执行浮点数除法;%是取模,只能用于整型,得到的数字是左数除以右数相除的余数。
2. 移位操作符
<< >>
<< 左移位操作符,即将一个值的二进制序列整体向左移动,最左边的几位丢弃,右边用0补齐
>> 右移位操作符,有逻辑移位,即将一个值的二进制序列整体向右移动,最右边的几位丢弃,左边用0补齐。算数移位,移动与逻辑移位相同,最左补符号位(正补0,负补1)。
3. 位操作符
& | ^
& 按位与 两个位 0&0=0 1&0=0 0&1=0 1&1=1
| 按位或 两个位 0&0=0 1&0=1 0&1=1 1&1=1
^ 异或 两个位 0&0=0 1&0=1 0&1=1 1&1=0
例: a 二进制序列是00101110 b的是01011011
a&b=00001010
a | b=01111111
a ^ b=01110101
*它们的操作数必须是整数。
4. 赋值操作符
= 把右边的操作数的值给右边
+=,-=,*=,/=,%=,<<=,>>=,&=,|=
+= a+=1 相当于 a=a+1 ,其他与之类似。
5. 单目操作符
! - + & sizeof ++ -- ~ * (类型)
! :逻辑取反操作,如果操作数为真,结果为假;操作数为假,结果为真。
- :产生操作值的负数。
+ :产生操作值。
& :产生操作数的地址。
sizeof : 操作数的类型长度,以字节为单位表示,操作数既可以是表达式,也可以是加上括号的类型名。
sizeof a ; sizeof(int)
*sizeof 不是函数。放在sizeof内部的表达式不参与运算。
数组名单独放在sizeof内部表示整个数组。
++:自增运算符 a=1;a++ 得到2
前后置的区别:++i 先自增再使用;i++ 先使用再自增
-- :自减运算符 与++类似
~:对整型操作数进行取反操作
*:间接访问操作符。它与指针一起使用,用于访问指针所指向的值。
(类型):强制类型转换, int a; (float)a;即将整型a的类型转换为单精度浮点型。
6. 关系操作符
>
>=
<
<=
!= 不等于
== 相等
陷阱: x = get_value();
if(x = 5)
x从函数获得一个值,但我们将5赋值给x,而不是将x与5比较,从而丢失了从函数获得的值,出现错误。
7. 逻辑操作符
&& 逻辑与 同真为真,否则为假;&&左操作数先求值,若为假,则不进行右操作数求值。
|| 逻辑或 同假为假,否则为真; || 左操作数先求值,若为真,则不进行右操作数求值。
8. 条件操作符
exp1 ? exp2 : exp3
若exp1为真,进行exp2;否则进行exp3。
例:if (a > 5)
b = 3; 可写为 a > 5 ? b = 3 : b=-20 ;
else
b = -20;
9. 逗号操作符
(exp1,exp2,......exp n)
表达式从左向右进行求值,整个逗号表达式的值为最右边表达式的值。
10.下标引用、函数调用和结构成员
(1) [ ]下表引用
操作数:一个数组名 + 一个索引值
arr[下标]
*(arr+(下标))
int arr[10]
arr[9] = 10;
[ ] 的两个操作数是arr 和9.
(2) ()函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余操作数就是传递给函数的参数。
(3) 访问一个结构的成员
.结构体.成员名
->结构体指针->成员名