C语言——操作符知识清单

操作符

分类:

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

算术操作符

操作符描述用法示例结合性
+加法rexp + rexpL-R
-减法rexp - rexpL-R
*乘法rexp * rexpL-R
/除法rexp / rexpL-R
%整数取余rexp % rexpL-R

/”若两个操作数都为整数→整数除法;只要含浮点数→浮点数除法
%”两个操作数都必须为整型,返回的是整除之后的余数。

移位操作符

操作符描述用法示例结合性
<<左移位rexp << rexpL-R
>>右移位rexp >> rexpL-R

左移位操作符移位规则:“左边抛弃,右边补0”
左移一位 (×2的效果)
左移二位 (×4的效果)……
右移操作符移位规则:
-算术右移“左边补原符号位,右边丢弃” 大多数编译器,以保持正负不变
-逻辑右移“左边补0,右边丢弃”
右移一位 (÷2的效果)
右移二位 (÷4的效果)
特别说明:a<<-1 是不合法的写法

位操作符

操作符描述用法示例结合性
&位与rexp & rexpL-R
|位或rexp | rexpL-R
^位异或rexp ^ rexpL-R

位(二进制位)
练习:求一个数字的二进制中1的个数(运用到位与&)
参考链接:https://blog.csdn.net/sillyxue/article/details/80287609

赋值操作符

-初始化 int weight = 120;
-赋值 weight = 89;
赋值操作符可以连续使用:例: a = x = y+1; → x=y+1 ; a=x ;
但是拆分比较清晰可见。
复合赋值符
+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=
举例:a=a+1; → a+=1;

单目操作符

-单目(只有一个操作数)

操作符描述用法示例结合性
逻辑反! rexpR-L
-单目,表示负值-rexpR-L
+单目,表示正值+rexpR-L
&取地址&lexpR-L
sizeof取其长度,以字节表示sizeof rexp ; sizeof(类型)R-L
~按位取反~rexpR-L
前缀自增–lexpR-L
++前缀自减++lexpR-L
*间接访问*rexpR-L
(类型)类型转换(类型)rexpR-L

①取地址操作符(&+变量)
Example: int num=10 ; (一级指针)int *p=& num ;(二级指针) int **pp=&p ;
(三级指针) int ***ppp=&pp ;
②sizeof 以字节为单位计算变量所占空间的大小/类型所创建空间的大小,且内部的表达式不计算。
补充:arr[10] = { 0 };
数组所占空间大小计算sizeof(arr)
数组类型空间大小计算sizeof(int [10])
③++a( 先加1再使用 );a++( 先使用再加1 )
④间接访问操作符Example:*P,表示通过P里存的值找到它指向的内容。

关系操作符

操作符描述用法示例结合性
>大于rexp > rexpL-R
>=大于等于rexp >= rexpL-R
<小于rexp < rexpL-R
<=小于等于rexp <= rexpL-R
!=不等于rexp != rexpL-R
==等于rexp == rexpL-R

!=(用于测试“不相等”)
== (用于测试“相等”)
注意:判断两个字符串/数组是否相等不能用“==”!

逻辑操作符

操作符描述用法示例结合性
&&逻辑与rexp && rexpL-R
||逻辑或rexp || rexpL-R

-&&都为真才真
-||有真则为真
练习:打印结果是多少?

include <stdio.h>
int main()
{
    int i = 0, a = 0, b = 2, c = 3, d = 4;
    //i = a++ && ++b && d++;//答案:1 2 3 4
    //i = a++ || ++b || d++; //答案:1 3 3 4
    printf("%d %d %d %d\n",a,b,c,d);
    return 0;
}

条件操作符

操作符描述用法示例结合性
?:条件操作符rexp?rexp1:rexp2N/A

若为真:rexp1 ;若为假:rexp2
练习:实现比较两个数的最大值
max = a > b? a : b ;

逗号表达式

exp1,exp2,exp3……expN
从左到右依次执行,整个表达式的结果是最后一个表达式的结果。
练习:打印结果是什么?

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    int c = (a > b, a = b + 10, a, b = a + 1);
    printf("%d\n",c);
    return 0;
}

答案:13(即最后一个逗号表达式的结果)。

下标引用、函数调用、结构成员

操作符描述用法示例结合性
[ ]下标引用rexp[rexp]L-R
( )函数调用rexp(rexp,..,rexp)L-R
.访问结构成员lexp.member_nameL-R
->访问结构指针成员rexp->member_nameL-R

①下标引用操作符:两个操作数(一个数组名+一个索引值)
下标为i元素的地址可以表示为:arr[ i ] = i [arr] = (arr+i) = (i+arr)
②()函数调用操作符
test(); 可接受一个或多个操作数。
③结构成员访问操作符
. 结构体.成员名
-> 结构体指针->成员名
Example :

#include <stdio.h>
struct Stu
{
    char name[10];
    int  age;
    char sex[5];
};
int main()
{
    struct Stu stu;//结构体变量
    struct Stu* pStu = &stu;//结构体指针
    stu.age = 20;//结构成员访问
    pStu->age = 20;//结构指针成员访问
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值