【C语言】操作符详解

13 篇文章 1 订阅
5 篇文章 1 订阅
  • 我这篇文章有很多不足之处,后期我会慢慢完善,如有错误还望各位大佬们指正,谢谢了。
  • 这篇博客借鉴了许多这链接里面的内容,链接里那个作者写的十分全面,而且还写了很多自己的总结,建议大家可以直接跳过我去浏览链接 里的这篇文章。
    https://blog.csdn.net/hitwhylz/article/details/14526569

操作符详解

1,操作符

分类:
1,算术操作符
2,移位操作符
3,位操作符
4,赋值操作符,复合赋值符
5,单目操作符,双目操作符,三目操作符
6,关系操作符
7,逻辑操作符
8,逗号表达式
9,下标引用,函数调用和结构成员

算术操作符

优先级操作符功能结合性名称说明
4+从左到右加号双目运算符
4-从左到右减号双目运算符
3*从左到右乘号双目运算符
3/从左到右除号双目运算符
3%取模(求余数)从左到右取模(余数)双目运算符

在这里插入图片描述
移位操作符

优先级操作符功能结合性名称说明
4<<左移操作符从左到右左移操作符双目运算符
4>>右移操作符从左到右右移操作符双目运算符
  • 左移,右移运算表达式的一般形式为:
    x<<n(左移n位),x>>n(右移n位)
  • 左移运算 的规则是将x的二进制位全部向左移动n位,将左边移出的高位舍弃,右边空出的低位补0。
  • 右移运算 的规则是将x的二进制位全部向右移动n位,将右边移出的低位舍弃,左边高位空出要根据量符号位的情况进行补充,对无符号数则补0,对有符号数,若为正数则补0,若为负数则补1。
  • 例如: 设a = 7,则:
    b=a<<2,即:b = 0000,0111 << 2 = 0001,1100 = 28
    c=a>>2,即:c = 0000,0111 >> 2 = 0000,0001 = 1
  • 左移的一个特殊用途是将整数值乘以2的幂,例如:左移运算表达式 1<<4的计算结果是16,右移可以用于将整数值除以2的幂

位操作符
注意:位操作符的操作数必须是整数且都以二进制形式

优先级操作符描述功能名称结合性说明
8&按位与两个位都为1时,结果才为1按位与从左到右双目运算符
9I按位或两个位都为0时,结果才为0按位或从左到右双目运算符
10^按位异或对应的二进制位相同为0相异为1按位异或从左到右双目运算符

例:
在这里插入图片描述
赋值操作符
结合性: 简单来说,就是把右边的值赋值到左边的变量上

优先级操作符功能结合性名称说明
14=给变量赋值从右向左赋值运算符----------

具体例子:
在这里插入图片描述
复合赋值符

优先级操作符功能结合性名称说明
14+=相加之后赋值从右向左加后赋值-------
14-=相减之后赋值从右向左减后赋值-------
14*=相乘之后赋值从右到左乘后赋值-------
14/=相除后赋值从右到左除后赋值-------
14%=取模后赋值从右到左取模后赋值-------
14>>=右移后赋值从右到左右移后赋值-------
14<<=左移后赋值从右到左左移后赋值-------
14&=按位与后赋值从右到左按位与后赋值-------
14I=按位或后赋值从右到左按位或后赋值-------
14^=按位异或后赋值值从右到左按位异或后赋值-------

使用复合操作符可以使代码变得更加简化

单目运算符
单目操作符有以下这些:

优先级操作符功能结合性名称说明
2逻辑反操作从右到左逻辑非运算符单目运算符
2-取负值从右到左负号运算符单目运算符
2&取地址从右到左取地址运算符单目运算符
2sizeof计算变量所占内存空间大小(以字节为单位)从右到左长度运算符单目运算符
2~对一个数的二进制进行按位取反从右到左按位取反运算符单目运算符
2- -可前置,可后置,数值减1从右到左自减运算符单目运算符
2++可前置,可后置,数值加1从右到左自增运算符单目运算符
2*间接访问地址中的内容从右到左解引用操作符单目运算符
2类型强制类型转换从右到左强制类型转换单目运算符

三目运算符

操作符功能结合性名称说明
?:简化程序从左到右条件预算符三目运算符

关系操作符

优先级操作符结合性名称说明
6>从左到右大于号双目运算符
6>=从左到右大于等于号双目运算符
6<=从左到右小于等于号双目运算符
6<从左到右小于号双目运算符
7==从左到右等于号双目运算符
7!=从左到右不等于号双目运算符

逻辑操作符

优先级操作符结合性名称说明
11&&从左到右逻辑与双目运算符
12II从左到右逻辑或双目运算符
优先级操作符结合性名称说明
15从左到右逻辑操作符---------

下标引用,函数调用和结构成员

  • 下标引用
优先级操作符名称组成
1[]下标引用操作符由一个数组名+一个索引值

例: int arr[9] = 10;
[]的两个操作数为arr9

  • 函数调用
优先级操作符名称组成
1()函数调用操作符由函数名和传递给函数的参数组成

例:

int calculate(int a,int b)
//这种属于函数定义
//而这里的圆括号是我们在定义函数时的语法规则
{
	return a+b;
}
int main()
{
	int i=0;
	int j=1;
	int x=calculate(i,j);
	//这种就属于函数调用
	//像这种函数调用符有calculate和i,j
	printf("%d\n",x);
	return 0
}
  • 结构成员
  • 这里要涉及一点结构体的知识,如果看不懂的话可以查阅一下结构体的知识即可。

. 操作符直接调用结构体中的某个成员,而——>操作符是通过结构体成员的地址直接调用结构体中的变量
例:

struct stu
{
	char name[20];
	int age;
	char id[20];
};
int main()
{
	struct stu s1 = {"张三",20,"20192245"};
	struct stu *pr =&s1;
	//printf("%s\n",(*pr).name);
	printf("%s\n",s1.name);
	printf("%d\n",s1.age);
	printf("%s\n",s1.id);
	printf("%s\n",pr——>name);
	printf("%d\n",pr——>age);
	printf("%s\n",pr——>id);
	return 0;
	//pr作为地址,——>的作用是访问空间pr中存储的内容
}

2,操作符优先级

级别(由高到低) 操作符(使用空格分隔) 结合性
1 () [] -> . 由左向右
2 ! ~ ++ – + - * (type) sizeof 由右向左
3 * / % 由左向右
4 + - 由左向右
5 << >> 由左向右
6 < <= > >= 由左向右
7 == != 由左向右
8 & 由左向右
9 ^ 由左向右
10 | 由左向右
11 && 由左向右
12 || 由左向右
13 ?: 由右向左
14 = += -= *= /= %= &= ^= |= <<= >>= 由右向左
15 , 由左向右

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值