【C】操作符详解

简介: 今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:

今天给大家带来一篇关于C语言操作符的详细介绍,在C语言中操作符主要有以下几种:

1.算术操作符

2.移位操作符

3.位操作符

4.赋值操作符

5.单目操作符

6.关系操作符

7.逻辑操作符

8.逗号表达式

9.条件操作符

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


接下来给大家详细介绍!


算术操作符

+ - * / %


其中加法和减法和数学中的一样,乘法在C语言中是*表示的,剩下的也和数学中是一样的。

在C语言中除法分为整数除法和小数除法,整数除法/两遍都得是整数,而小数除法/两边只要有一个小数就可以了。列如:

#include <stdio.h>
int main()
{
  printf("%d\n", 2 / 3);
  printf("%lf\n", 2 / 3.0);
  printf("%lf\n", 2.0 / 3.0);
  printf("%lf\n", 2.0 / 3);
  return 0;
}

代码运行结果:

e45ccbef730b4bdd813d9b80263d1931.png

还有一个%取余操作符,就是求余数,这个操作符需要注意的事,符号两边都必须是整数,不可以是浮点数!


移位操作符

<< 左移操作符

>> 右移操作符


移位操作符操作的是我们的二进制位,所以在这里给大家补充一个知识点,原码、反码、补码。

对于一个有符号的整数来说,二进制为的最高位为符号位。

正数的原码、反码、补码都相同。

负数的原码就是按二进制的形式写出来就行。反码就是符号位不变,剩下的按位取反,补码就等于反码加1。


左移操作符就是所有的二进制位向左移动,左边的丢弃,右边补0。

右移运算分为两种:

  1. 逻辑移位 左边用0填充,右边丢弃
  2. 算术移位 左边用原该值的符号位填充,右边丢弃


代码演示

#include <stdio.h>
int main()
{
  printf("%d\n", 5 >> 1);
  printf("%d\n", 5 << 1);
  return 0;
}

代码运行结果:

8e4ba57dec914f81bbe7e3328840f9f4.png

对于移位运算符,不要移动负数位,这个是标准未定义的。


位操作符

& 按位与

| 按位或

^ 按位异或


位操作符操作的也是二进制位。

&操作符,两个数二进制位对应的都是1才是1,只要有0就是0。

| 操作符,两个数二进制位对应的都是0才是0,只要有1就是1。

^操作符,两个数二进制位相同为0,相异为1。

代码演示:

#include <stdio.h>
int main()
{
  printf("%d\n", 1 & 2);
  printf("%d\n", 1 | 2);
  printf("%d\n", 1 ^ 2);
  printf("%d\n", 1 ^ 2 ^ 1);
  printf("%d\n", 1 ^ 1 ^ 2);
  return 0;
}

运行结果

c5cd9022a9174b54be4e2e0159851074.png

从运行结果我们也可以看出,^操作符满足交换律。


赋值操作符(=)

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。


复合赋值操作符

+=

-=

*=

/=

%=

>>=

<<=

&=

|=

^=


这些运算符都可以写成复合的效果。

例如a+=b就等价于a=a+b。


单目操作符

! 逻辑反操作

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反

– 前置、后置–

++ 前置、后置++*

* 间接访问操作符(解引用操作符)

(类型) 强制类型转换


sizeof(数组名)计算的是整个数组所占空间的大小

这里重点讲一下前置++和后置++,–跟它同理。

前置++,变量先加1在使用。

后置++,先使用变量的值,在加1。

解引用操作符可以拿到指针指向的那个内容。


关系操作符

>

>=

<

<=

!= 用于测试“不相等”

== 用于测试“相等


这些关系运算符比较简单,没什么可讲的。


逻辑操作符

&& 逻辑与

|| 逻辑或


&&两边都为真才为真,否则为假,如果左边为假,右边就不进行运算了。

|| 两边都为假才为假,都则为真,如果左边为真,右边就不进行运算了。


逗号表达式

exp1, exp2, exp3, …expN


逗号表达式,会从左向右依次计算,最后一个表达式的值为最终表达式的值。

代码演示

#include <stdio.h>
int main()
{
  int num = 0;
  num = (3 + 2, 2 + 4, 5 + 5);
  printf("%d\n", num);
  return 0;
}

运行结果

1d0ef69d06d8477585b9ddcd288ba715.png


条件操作符

exp1 ? exp2 : exp3


这个操作符,如果exp1为真,就运算exp2为最终结果,否则exp3为最终结果。

比如我们求两个数最大值:


max = (a > b ? a : b);


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

1.[ ] 下标引用操作符

操作数:一个数组名 + 一个索引值

2.( ) 函数调用操作符 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。

3.访问一个结构的成员

. 结构体.成员名。

-> 结构体指针->成员名。


操作符的优先级

28dc74aa784a4c61aeff2b3259a3b848.png

今天的分享就到这里结束了,感谢大家的关注和支持。

相关文章
|
JavaScript Docker 容器
Docker中文件拷贝命令的详细解释与真实案例
Docker中文件拷贝命令的详细解释与真实案例
758 0
|
存储 关系型数据库 数据库
postgresql|数据库|提升查询性能的物化视图解析
postgresql|数据库|提升查询性能的物化视图解析
1319 0
|
机器学习/深度学习 数据采集 人工智能
《零基础实践深度学习》基于线性回归实现波士顿房价预测任务1.3.3
这篇文章详细介绍了如何使用线性回归算法实现波士顿房价预测任务,包括数据读取、形状变换、集划分、归一化处理、模型设计、前向计算以及损失函数的计算等步骤,并提供了相应的Python代码实现。
 《零基础实践深度学习》基于线性回归实现波士顿房价预测任务1.3.3
|
11月前
|
缓存 前端开发 Serverless
前端技术新趋势:从PWA到Serverless架构
【10月更文挑战第1天】前端技术新趋势:从PWA到Serverless架构
142 3
|
JavaScript 前端开发
【vue】 接口返回的preview是张图片,前端如何渲染
【vue】 接口返回的preview是张图片,前端如何渲染
373 0
|
数据采集 监控 数据可视化
场景解决方案丨突破成本限制,中小企业如何快速搭建后台管理系统
在信息化时代,业务数据激增及技术成本下降推动了数字化转型。大型企业凭借经济和技术优势巩固市场地位,而中小企业则需寻找新的增长点以保持竞争力。企业后台管理系统涵盖行政、财务、人力资源等功能,旨在提高运营效率和优化资源配置。然而,中小企业面临预算有限、开发时间紧迫、技术资源匮乏及维护成本高昂等问题。易知微提供的解决方案通过低代码平台简化配置操作,覆盖多种应用场景,如办公OA、采购管理和物流运输等,助力中小企业快速搭建后台管理系统,降低成本并提升效率。
|
11月前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
903 0
|
弹性计算 安全 Ubuntu
ECS(Elastic Compute Service)中选择镜像
ECS(Elastic Compute Service)中选择镜像
201 4
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
990 5
|
SQL Oracle 关系型数据库
SAP* DDIC密码丢失如何处理
SAP* DDIC密码丢失如何处理
145 2