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

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

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

操作符描述用法示例结果类型结合性是否控制求值顺序
()聚组(表达式)与表达式相同N/A
()函数调用rexp(rexp,…,rexp)rexpL-R
[ ]下标引用rexp[rexp]lexpL-R
.访问结构成员lexp.member_namelexpL-R
->访问结构指针成员rexp->member_namelexpL-R
++后缀自增lexp ++rexpL-R
- -后缀自减lexp –rexpL-R
!逻辑反! rexprexpR-L
~按位取反~ rexprexpR-L
+单目,表示正值+ rexprexpR-L
-单目,表示负值- rexprexpR-L
++前缀自增++ lexprexpR-L
前缀自减– lexprexpR-L
*间接访问* rexplexpR-L
&取地址& lexprexpR-L
sizeof取其长度,以字节表示sizeof(类型)rexpR-L
(类型)类型转换(类型) rexprexpR-L
*乘法rexp * rexprexpL-R
/除法rexp / rexprexpL-R
%整数取余rexp % rexprexpL-R
+加法rexp + rexprexpL-R
-减法rexp - rexprexpL-R
<<左移位rexp << rexprexpL-R
>>右移位rexp >> rexprexpL-R
>大于rexp > rexprexpL-R
>=大于等于rexp >= rexprexpL-R
<小于rexp < rexprexpL-R
<=小于等于rexp <= rexprexpL-R
==等于rexp == rexprexpL-R
!=不等于rexp != rexprexpL-R
&位与rexp & rexprexpL-R
^位异或rexp ^ rexprexpL-R
竖杠位或rexprexp 竖杠rexpL-R
&&逻辑与rexp && rexprexpL-R
双竖杠逻辑或rexp 双竖杠 rexprexpL-R
?:条件操作符rexp ? rexp : rexprexpN/A
=赋值lexp = rexprexpR-L
+=以…加lexp += rexprexpR-L
-=以…减lexp -= rexprexpR-L
*=以…乘lexp *= rexprexpR-L
/=以…除lexp /= rexprexpR-L
%=以…取模lexp %= rexprexpR-L
<<=以…左移lexp <<= rexprexpR-L
>>=以…右移lexp >>= rexprexpR-L
&=以…与lexp &= rexprexpR-L
^=以…异或lexp ^= rexprexpR-L
竖杠=以…或lexp 竖杠= rexprexpR-L
逗号rexp,rexprexpL-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;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值