C语言操作符总结+详解!

下表即为C语言全部常用的操作符

操作符的优先级从高至低按由上到下的顺序排列

操作符 描述 用法示例 结果类型 结合性 是否控制求值顺序
() 聚组 (表达式) 与表达式相同 N/A
() 函数调用 rexp(rexp,…,rexp) rexp L-R
[ ] 下标引用 rexp[rexp] lexp L-R
. 访问结构成员 lexp.member_name lexp L-R
-> 访问结构指针成员 rexp->member_name lexp L-R
++ 后缀自增 lexp ++ rexp L-R
- - 后缀自减 lexp – rexp L-R
! 逻辑反 ! rexp rexp R-L
~ 按位取反 ~ rexp rexp R-L
+ 单目,表示正值 + rexp rexp R-L
- 单目,表示负值 - rexp rexp R-L
++ 前缀自增 ++ lexp rexp R-L
前缀自减 – lexp rexp R-L
* 间接访问 * rexp lexp R-L
& 取地址 & lexp rexp R-L
sizeof 取其长度,以字节表示 sizeof(类型) rexp R-L
(类型) 类型转换 (类型) rexp rexp R-L
* 乘法 rexp * rexp rexp L-R
/ 除法 rexp / rexp rexp L-R
% 整数取余 rexp % rexp rexp L-R
+ 加法 rexp + rexp rexp L-R
- 减法 rexp - rexp rexp L-R
<< 左移位 rexp << rexp rexp L-R
>> 右移位 rexp >> rexp rexp L-R
> 大于 rexp > rexp rexp L-R
>= 大于等于 rexp >= rexp rexp L-R
< 小于 rexp < rexp rexp L-R
<= 小于等于 rexp <= rexp rexp L-R
== 等于 rexp == rexp rexp L-R
!= 不等于 rexp != rexp rexp L-R
& 位与 rexp & rexp rexp L-R
^ 位异或 rexp ^ rexp rexp L-R
竖杠 位或 rexp rexp 竖杠rexp L-R
&& 逻辑与 rexp && rexp rexp L-R
双竖杠 逻辑或 rexp 双竖杠 rexp rexp L-R
?: 条件操作符 rexp ? rexp : rexp rexp N/A
= 赋值 lexp = rexp rexp R-L
+= 以…加 lexp += rexp rexp R-L
-= 以…减 lexp -= rexp rexp R-L
*= 以…乘 lexp *= rexp rexp R-L
/= 以…除 lexp /= rexp rexp R-L
%= 以…取模 lexp %= rexp rexp R-L
<<= 以…左移 lexp <<= rexp rexp R-L
>>= 以…右移 lexp >>= rexp rexp R-L
&= 以…与 lexp &= rexp rexp R-L
^= 以…异或 lexp ^= rexp rexp R-L
竖杠= 以…或 lexp 竖杠= rexp rexp R-L
逗号 rexp,rexp rexp L-R

(由于表格编辑问题,表中的“|”用“竖杠”代替)

操作符的分类:

算术操作符

+   -   *   /   %

除了%操作符只能用于整数外,其他几个操作符可以用于整数和浮点数。
对于/操作符如果两个操作符都为整数,执行整数除法,当存在浮点数时就执行浮点数除法。

移位操作符

<<  //左移
>>  //右移

移位在二进制下进行
左移操作符规则:左边抛弃,右边补0

int num = 10;
num<<1

num在内存中的二进制00000000000000000000000000001010
变为00000000000000000000000000010100
右移操作符规则:
分为两种:1.逻辑移位左边用0填充,右边丢弃
2.算术移位左边用原该值的符号位填充,右边丢弃
具体使用哪一种取决于编译器
另外,不要移动负数位

num>>-1; //错误的使用

位操作符

&   //按位与  两个二进制数比较,相同位数上的数一样返回值位1
|   //按位或  相同位数上有1返回值就为1
^   //按位异或  相同位数上的数相同返回值为0,相异返回值为1

注:它们的操作数必须是整数。
输入如下代码看看它们的值是多少

 #include <stdio.h>
    int main()
    {
        int num1=2;
        int num2=2;
        int a = num1 & num2;
        int b = num1 | num2;
        int c = num1 ^ num2;
        printf(“%d %d %d”,a,b,c)
        return 0;
    }    

位操作符的妙用
不创建临时变量,实现两个数的交换

#include <stdio.h>
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;
}

赋值操作符

int a = 1;
a = 100;

复合赋值符

+=  *=  /=  %=  >>=  <<=  &=  |=  ^=

单目操作符

!  -  +  &  sizeof  ~  --  ++  *  (类型)

关系操作符

>  >=  <  <=  !=  ==

逻辑操作符

&&   逻辑与
||   逻辑或

条件操作符

exp1 ? exp2 : exp3

逗号表达式

exp1, exp2, exp3, ...

下表引用、函数调用和结构成员

1.[]下标引用操作符

int arr[10];
arr[9] = 10;

这里也可以用9[arr]来表示
2.()函数调用操作符

  int main
    {
         test1();
         test2(1);
    }

3 .访问结构成员
结构体.成员名
结构体指针->成员名

#include <stdio.h>
struct Stu
{
     char name[10];
     int age;
     char sex[5];
     double score;
};
void set_age1(struct Stu stu)
{
     stu.age = 18;
}
void set_age2(struct Stu* pStu)
{
     pStu->age = 18;//结构成员访问
}
int main()
{
     struct Stu stu;
     struct Stu* pStu = &stu;//结构成员访问
     stu.age = 20;//结构成员访问
     set_age1(stu);
     pStu->age = 20;//结构成员访问
     set_age2(pStu);
     return 0;
}

猜你喜欢

转载自blog.csdn.net/wss_yb/article/details/83415656