操作符

时间:2022-12-27 07:10:41

1.操作符分类

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号表达式
  • 下标引用、函数调用和结构成员


2.算术操作符

+ — * /


  • 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  • 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
  • % 操作符的两个操作数必须为整数。返回的是整除之后的余数。


3.移位操作符

  • <<左移位
  • >>右移位
  • 注:移位操作符的操作数只能是整数


3.1左移位操作符

  • 左边抛弃,右边补0

3.2右移位操作符

  • 逻辑移位:左边用0填充,右边丢弃
  • 算术移位:左边用原该值的符号位填充,右边丢弃


4.位操作符

& //按位与
| //按位或
^ //按位异或
  • 注:他们的操作数必须是整数

不能创建临时变量,实现两个数的交换

int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %d\n", a, b);
return 0;
}

5.单目操作符

!           逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换

6.关系操作符

>
>=
<
<=
!= 不相等
== 相等

7.逻辑操作符

&&     逻辑与
|| 逻辑或
int main()
{
int i = 0,a=0,b=2,c =3,d=4;
i = a++ && ++b && d++;
//i = a++||++b||d++;
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}
//程序输出的结果是什么?

8.条件操作符

exp1 ? exp2 : exp3
if (a > 5)
b = 3;
else
b = -3;
//转换成条件表达式
a>5?b=3:b=-3

9.访问一个结构的成员

struct Stu
{
char name[20];
int age;
char id[20];
};
int main()
{
//使用struct Stu这个类型创建了一个学生对象s1,并初始化
struct Stu s1 = { "张三", 20, "20221226" };
struct Stu*ps = &s1;
printf("%s\n", ps->name);
printf("%d\n", ps->age);
printf("%s\n", ps->id);
//结构体指针->成员名

/*printf("%s\n", (*ps).name);
printf("%d\n", (*ps).age);*/

/*printf("%s\n", s1.name);
printf("%d\n", s1.age);
printf("%s\n", s1.id);*/
//结构体变量.成员名
return 0;
}