目录
算术操作符
算术操作符就是我们常见的加减乘除以及取模操作,+ - * / %
+ - * 这三个运算符与我们平时所用的一样,不同的是 /运算符和 % 操作符
1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
2. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
3. 对于 / 操作符如果两个操作数都为整数,执行整数除法。整数除法得到的结果也只会是整数;
想要得到浮点数,,除数两端必须要有其中一个为浮点数;例如:
5 / 2 = 2(整数除法只能得到整数) 5.0 / 2 = 2.5(两端有一个为浮点数)
移位操作符
<< 左移操作符
>> 右移操作符
在学习以为操作符需要先穿插一个知识点,二进制的原码反码补码,移位运算是在补码上进行的
将一个整数转化成二进制数,计算出它对应的反码和补码
<< 左移操作符
移位规则: 左边抛弃、右边补0
>>右移操作符
移位规则:
首先右移运算分两种:
1. 逻辑移位 左边用0填充,右边丢弃
2. 算术移位 左边用原该值的符号位填充,右边丢弃
在绝大部分编译器下采用的都是算术移位
很多小伙伴可能也发现了,左移可以达到 *2的效果,而右移可以达到 /2的效果
警告⚠ : 对于移位运算符,不要移动负数位,这个是标准未定义的。 例如:
int n = 5;
n>>-1 //error
位操作符
& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。
按位与&是将两个数的二进制位分别按位进行逻辑&运算(全1出1,有0出0)
例如
按位或 | 是将两个数的二进制位分别按位进行逻辑 | 运算(全0出0,有1出1)
按位异或 ^是将两个数的二进制位分别按位进行逻辑 ^ 运算(相同出0,不同出1)
赋值操作符
赋值操作符就是 = ,将操作符右边的值赋给操作符左边
值得注意的是各种复合赋值符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
这些运算符都可以写成复合的效果。 比如:
int x = 10;
x = x+10;
x += 10;//复合赋值
两个表达式的结果相等
其他运算符一样的道理。这样写更加简洁。
单目操作符
单目操作符介绍
! 逻辑反操作(将加变为真,真变为假)
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置--(先--再使用)、后置--(先使用再--)
++ 前置++(先++再使用)、后置++(先使用再++)
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。
例如: 在编程的过程中== 和=不小心写错,导致的错误。
逻辑操作符
&& 逻辑与 (两者都为真,结果为真,有一个为假,结果就是假)
|| 逻辑或 (两者其中一个为真,结果就为真,两者都为假,结果为假)
例如:
//0为假,非0为真,真返回1,假返回0
int n = 1
int m = 0;
int k = 2;
n && m // 为假,结果返回0
n || m // 为真,结果返回1
n && k // 为真,结果返回1
条件操作符
用法:
exp1 ? exp2 : exp3
若exp1表达式为真,则则返回exp2的值,为假则返回exp3的值
类似于if else语句
例如:
int n = 2;
int m = 5;
(n > m) ? n : m ;
//若 n真的大于m 为真,则返回n的值 ,若n不大于m,则返回m的值
逗号表达式 下标引用、函数调用和结构成员
逗号表达式
exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
例如:
int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);
//c得到的值是 b = a+1的值13
下标引用、函数调用和结构成员
1. [ ] 下标引用操作符 操作数:一个数组名 + 一个索引值
int arr[10] = {0,1,2,3,4,5,6,7,8,9}l;
arr[4] = 9;
//arr和4是[]的两个操作数
2. ( ) 函数调用操作符 接受一个或者多个操作数:
第一个操作数是函数名,剩余的操作数就是传递给函数的参数
int add(int x , inty)
{
return x + y;
}
add(2,5);
//add是()的第一个操作数,2,5是()的第二个操作数
3. 访问一个结构的成员
. 结构体.成员名
-> 结构体指针->成员名
struct node
{
int x = 2;
int y = 5;
};
node n;//创建结构体变量
node* p = &n;//创建结构体指针变量
int k = n.x;//访问结构体成员x
k = p->x;//访问结构体成员x