表达式的求值与运算符的优先级和结核性有关。
<1>运算符
2.其运算符从高到低的顺序为(我写的了解也是这个顺序写的)
(1)数组下标,函数调用,结构成员操作符
(2)单目运算符
(3)算数运算符(有两个优先级)
(4)移位操作符
(5)关系操作符(有两个优先级)
(6)位操作(有三个优先级)
(7)逻辑操作符(有两个优先级)
(8)条件操作符
(9)赋值操作符
(10)逗号操作符
3.操作符的相关用法
(1)数组下标,函数调用,结构成员操作符
如int a[10]={0};而其中的a[7]的[ ]就是一个数组下标运算符
int a=get_max(a,b);其中的()就是一个函数调用操作符
这个结构体成员操作符有两个,需先定义个结构体(下面是在已定义结构体情况)
1.结构体.成员
2.先创建一个结构体.成员名 ------》先用一个结构体指针(struct 结构体* 自己定义的地址名=结构体)储存地址----》再 结构体指针->成员名 或者 (解引用操作成员).成员名字
如例子
#include
struct boy
{
int age;
int hight;
char name[20];
};
int main()
{
struct boy xiaoming = {10,167,"小明"};
struct boy* xiaomingdj = &xiaoming;
printf("%d\n", xiaoming.hight);//167
printf("%d\n", (*xiaomingdj).age);//10
printf("%s\n", xiaomingdj->name);//小明
return 0;
}
(2)单目运算符(10个)
-负值 +正值
&取地址操作符 *解引用操作符
{
int a=10;
int* p=&a;这个&是取地址操作符;
*p这个的*是解应用操作符
++前置加 后置加 ——前置减 后置减
}
!逻辑反操作
(类型)强制运算符
~对一个数按位取反(这个是先转化为二进制,记得是补码)
sizeof计算所占内存的大小 测数组则sizeof(int[10])这是40,而且传参是以地址形式传参看编译器是64or32位
(3)算数运算符号
(优先级高些)% (取余) * /
(优先级低些)+ -
(4)移位操作符(也是二进制位移,这个不出现浮点型)
<< int a=1;b=a<<2;结果b变成了4(这是算数左移动,可参考下面算数右移动)
>>其移动的都是二进制位,并且为算数右移动:左边补原符号位,右边丢弃
(5)关系操作符
(优先级高些)> < >= <=
(优先级低些)== !=
(6)位操作(也是二进制)
&按位与(优先级最高) int a=3&5即a=011&101>a=001则a为1
^按位异或 (优先级居中) int a=3^5即a=011^101>a=110则a为6
|按位或 (优先级最后) int a=3|5即a=011|101>a=111则a为7
(7)逻辑操作符(其具有短路现象)
&&逻辑与(优先级高些)【如果a&&b,a为假则b不进行计算】
||逻辑或(优先级低些)【如果a||b,a为真则b不进行计算】
(8)条件运算符
判断1?a:b;//(如果1为真则执行a,否则执行b)
(9)赋值运算符
有赋值运算符=
和复合赋值号,有+=,-=,*=,/=,%=,>>=,<<=,&=,|=,^=;
(10)逗号运算符
其为用逗号隔开的多个表达式,从左向右执行,整个表达式的结果为最后一个表达式结果如int a=(b=b+c,b+c);则a=b+2*c
//好了这就是我对c语言运算符号的总结,希望这对你有所帮助