一,算数操作符
算数操作符无非就是:
+ - * % /
需要注意的是%操作符只能作用于整型变量,除此之外都可以作用于浮点数。
二,移位操作符
>>----------------右移操作符
右移操作符:
算术右移(通常都为算术右移):
右边丢掉,左边加原来的符号。
逻辑右移:
右边丢掉,左边加0。
<<----------------左移操作符
左移操作符:
左边丢弃,右边补0。
注:移位操作符移动的是二进制数字,数字在计算机里以二进制存在(分为原码,反码,补码),储存到内存的是补码,其中正整数原反补相同。但负数不同,负数的原码为自身二进制,反码的符号位置(由左到右第一个数)不变,按位取反,补码为反码加一可得到。
注2:不要移动负数位,这种行为是未定义的。如:
int a = 1;
a >> -1;
三,位操作符
位操作符有:
&:按危与
|:按位或
^:按位异或
这三种,他们的操作位必须为整数,都在用二进制,接下来我们看看咋用:
&:
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a&b;
// a :000000000000000000000000000000000011
// b :000000000000000000000000000000000101
// c :000000000000000000000000000000000001
// 总结一下就是有0就为0;
printf("%d", c);
return 0;
}
结果和我们算的一样为1;
|:
int main()
{
int a = 3;
int b = 5;
int c = a|b;
// a :000000000000000000000000000000000011
// b :000000000000000000000000000000000101
// c :000000000000000000000000000000000111
// 总结一下就是有1就为1;
printf("%d", c);
return 0;
}
结果和我们算的一样为7;
^:
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a^b;
// a :000000000000000000000000000000000011
// b :000000000000000000000000000000000101
// c :000000000000000000000000000000000110
// 总结一下就是 相同为0,相异为1;
printf("%d", c);
return 0;
}
结果和我们算的一样为6;
四,单目操作符:
! 逻辑反操作
- ,-- 负值,递减
+ ,++ 正值,递增
& 取地址
sizeof 操作数的类型长度(字节)
~ 对一个数的二进制按位取反
* 解引用
(类型) 强制类型转换
五,逗号表达式
逗号表达式,就是逗号隔开的多个表达式。逗号表达式,从左到右依次执行,整个表达式的结果是最后一个表达式的结果。
六,关系操作符
>
>=
<
<=
!= 不相等
== 相等
注:== 和 = 容易写错
七,逻辑操作符
&& 和
|| 或
就是字面意思,没内涵..........
八,下标引用,函数调用和结构成员
1.下标引用操作符:[ ]
一个数组名加一个索引值 如:arr[10]
2.函数调用操作符:( )
接受一个或多个操作数:第一个操作数是函数名,其他的操作数是函数的参数 如:sum(a, b),其中操作数有三个2分别为:sum, a, b
3.结构体类型--struct
. 结构体.成员名
-> 结构体指针->成员名
我举个示例:
#include<stdio.h>
struct student
{
char nume[20];
int age;
};
int main()
{
//创造了一个学生对象s1,并初始化
struct student s1 = {"皮卡丘",99};
struct student* aa = &s1;
//结构体指针->成员名
printf("%s\n", aa->nume);
printf("%d\n", aa->age);
//结构体变量.成员名
printf("%s\n", s1.nume);
printf("%d\n", s1.age);
return 0;
}
操作符还要注意四个影响因素:
1.操作符的优先级。
2.操作符的结合性。
3.是否控制求值次序。
4.整形提升(可以不算的)
看完了有用,求求点赞啊。。。。。。。。。。。