当前位置: 首页 > java >正文

C语言(长期更新)第10讲:操作符详解(二)

C语言(长期更新)

第10讲:操作符详解(二)

    跟着潼心走,轻松拿捏C语言,困惑通通走,一去不回头~欢迎开始今天的学习内容,你的支持就是博主最大的动力。博主主页:潼心1412o-CSDN博客


知识回顾

上节课我们学习了操作符的部分内容,对部分操作符有了扎实的掌握,今天我们来继续学习未完成的内容,坐稳了,我们发车,gogogo,出发喽!


目录

C语言(长期更新)

第10讲:操作符详解(二)

知识回顾

9.11 结构体

9.12 操作符的两大属性

9.12.1 优先级

9.12.2 结合性

9.13 表达式求值

9.13.1 整型提升

9.13.2 算术转换

9.14 潜在风险


9.11 结构体

在描述比较复杂的事物时,单一的内置类型就会显得单薄而无力

C语言提供了一种自定义类型——结构体

struct tag

{

     member-list

}variable-list;

  • struct是必写的关键字,表示为自定义类型结构体
  • tag 是自定义类型名
  • member-list 是指成员列表
  • variable-list 是指变量列表,可省略
  • ; 位于末尾,必不可少

下面我们看一个🌰

当然,结构体内部也可以嵌套结构体

结构体成员访问又分为两种

一种是直接访问,就是用结构成员访问操作符.直接进行访问

第二种是间接访问,会借助到我们下节课指针的内容

这里我们先简单了解一下结构体的基本知识,后续会有详细的知识讲解

9.12 操作符的两大属性

9.12.1 优先级

假如说一个表达中存在多个操作符,如何按顺序执行呢?这就涉及到操作符的优先级了。

下面我给出常见操作符优先级,其他有需要可按表格自行查找

  1. 圆括号()
  2. 自增自减运算符++ --
  3. 正负(一元运算符) + -
  4. 整除 * /
  5. 加减 + -
  6. 关系运算符 < >
  7. 赋值运算符 =

9.12.2 结合性

当两个操作符优先级相同时,就只能使用结合性进行判断了

附表

9.13 表达式求值

9.13.1 整型提升

C语言中整型算术运算总是至少以缺省类型(默认int)整型类型的精度进行的

为达此精度,表达式中的字符型(char)和短整型(short)都要先转换为普通整型(int)

这种转换就称作整型提升

整型提升的意义

表达式的整型提升要在CPU的相应运算器件内进行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU通用寄存器的长度

因此,即使是两个char类型整数的相加,也必须先转换为CPU内整型操作数的标准长度。

通用CPU(general-purpose CPU)难以直接实现两个8比特直接相加运算(虽然机器指令中可能存在这样的指令)。所以,表达式中各种长度可能小于int长度的整型值都会被转化为int类型,再在CPU中进行运算。

如何进行整体提升呢?


有符号整型提升——按照变量数据类型的符号位提升,1补1,0补0

无符号整型提升——高位补0

下面举个🌰

这段代码要如何计算呢?

首先我们需要把它换成二进制

120不会转换二进制?那就计算器吧

9.13.2 算术转换

若某个操作符的各操作符属于不同类型,除非一个操作数类型转换为另一个操作数的类型,否则操作将无法进行。寻常算术转换层次体系如下:

1. long double

2. double

3. float

4.unsigned long int 

5. long int 

6. unsigned int

7.int 

排名靠后的操作数类型会转化为靠前的类型

9.14 潜在风险

即使我们拥有操作数的两大属性优先级和结合性,计算机路径仍不唯一,存在着潜在的风险。

建议不要写太复杂的表达式。


    好了今天的学习内容就到这里啦,谢谢你的陪伴,我是潼心,下次再见~如果这篇文章对你有帮助的话。请务必给主播一个一键三连,球球了,这对主播很重要~ 

博主主页:潼心1412o-CSDN博客

http://www.xdnf.cn/news/17560.html

相关文章:

  • vue3项目中在一个组件中点击了该组件中的一个按钮,那么如何去触发另一个组件中的事件?
  • playwright-mcp 项目全解析:从理论到实践
  • 量子计算机实用化:从理论到现实的艰难跨越
  • (一)Tailwindcss
  • Win10清理C盘步骤
  • Spring事务失效的常见原因
  • ROS2 QT 多线程功能包设计
  • 基于PyTorch一文讲清楚损失函数与激活函数并配上详细的图文讲解
  • redis集群-docker环境
  • 咪咕MGV3200-KLH_GK6323V100C_板号E503744_安卓9_短接强刷包-可救砖
  • 大数据架构演变之路
  • java的三种组件漏洞靶场攻略
  • LeetCode 组合总数
  • 人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?
  • 1. 电阻选型
  • 计算机网络:如何理解目的网络不再是一个完整的分类网络
  • mpv core_thread pipeline
  • jmeter常规压测【读取csv文件】
  • 北京JAVA基础面试30天打卡06
  • Vulhub靶场组件漏洞(XStream,fastjson,Jackson)
  • 北京天津廊坊唐山打捞失物日记
  • 双非二本如何找工作?
  • jxWebUI--按钮
  • 黑马SpringBoot+Elasticsearch作业2实战:商品搜索与竞价排名功能实现
  • 【RocketMQ 生产者和消费者】- ConsumeMessageConcurrentlyService 并发消费消息
  • socket编程中系统调用send()详细讲解
  • MySQL自增ID与UUID的区别及其在索引分裂中的表现与优化
  • 七、CV_模型微调
  • 通过sealos工具在ubuntu 24.02上安装k8s集群
  • DevOps:从GitLab .gitlab-ci.yml 配置文件到CI/CD