操作符续(整型提升与算术转换)

简介: 操作符续(整型提升与算术转换)

目录

🥕前言

🫑逻辑操作符

🫓条件操作符

🍟逗号表达式

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

🍛表达式求值

🥘隐式类型转换(整型提升)

🥗算术转换

🍿操作符的属性

🍚总结


🥕前言

上期,我们对操作符的的算术,移位,位,赋值,复合赋值,单目,关系操作符进行了讲解,这期我们将会讲到逻辑,条件操作符和逗号表达式,下标引用,函数调用,结构成员和表达式求值中的整型提升和算术转换。我们会对整型提升和算术转换进行重点的分析。

🫑逻辑操作符

&&      逻辑与

||        逻辑或

区分逻辑与和按位或  

区分逻辑或和按位或

🫓条件操作符

exp1 ?  exp2 : exp3

理解:exp1为真,表达式为exp2,exp1为假,表达式为exp3.

🍟逗号表达式

exp1, exp2, exp3, ......expN

逗号表达式就是用逗号隔开的表达式。

逗号表达式,从左向右依次计算,整个表达式的结果就是最后一个表达式的结果。

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

1. [] 下标引用操作符

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

int arr[10 ];  创建数组

arr [4] = 10; 下标引用操作符

[] 的操作数为arr和4

2. ()函数调用操作符

接受一个或者多个操作符:第一个操作数是函数名,剩下的操作符就是传递给函数的参数。

3. 访问一个结构的成员

.                结构体.成员名

->            结构体->成员名

🍛表达式求值

表达式求值的顺序一部分是由操作符的优先级和结合性觉决定的。

同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型

🥘隐式类型转换(整型提升)

C语言的整型算术运算总是至少以缺省整型类型的精度来进行的,我个人的理解是:C语言算术运算中字节数少于整型字节数的数据类型在进行整形运算中会被转化为整型数据,这个过程就被成为被称为整型提升。

整型提升的意义:

一般表达式的整型计算是在电脑上的CPU相应的运算器执行,然而CPU的运算器ALU的操作数的字节大小一般是int类型的字节大小,其次CPU中的寄存器的大小也等于int类型的字节大小,而我们知道,数据在被运算的时候不是直接储存在ALU中,而是储存在储存器当中,但通常ALU的字节大小与寄存器的字节大小相等。所以小于4个字节的整型在相加时,在CPU中通常会先转化为CPU中操作数的标准字节长度。

一般cpu是难以实现两个字节的直接相加运算。所以,一般长度小于int类型的整型值,都必须转化为int或unsigned int类型再送入CPU中计算。

如何整型提升:

整型提升时按照变量的数据类型的符号位来提升的

1 如果是无符号的,则高位都补0

2 如果是有符号的,则高位都补符号位

注:在计算机中任何数据储存都是二进制的补码

🥗算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。下面的层次体系为寻常算术转换。

long double

double

float

unsigned long int

long int

unsigned int

int

🍿操作符的属性

复杂表达式的求值有三个影响的因素:

1. 操作符的优先级

2. 操作符的结合性

3. 是否控制求值顺序

两个相邻操作符取决于它们的优先级。如果两者优先级一样,取决于它们的结合性。

下面是部分操作符的优先级:

🍚总结

到这里,操作符的全部内容已经全部分析完了。对于操作符,看是不起眼,但是在c语言中它具有螺丝钉的作用,大家还是得重视重视它们。下一期文章我们将会对c语言中人人害怕的指针下手了,其实我认为它也没那么可怕叭,进行合理的理解就行咯。那大家还是对下一篇指针文章期待一下叭。

目录
相关文章
|
SQL 安全 算法
网络安全与信息安全的全面解析:应对漏洞、加密技术及提升安全意识的策略
本文深入探讨了网络安全和信息安全的重要性,详细分析了常见的网络安全漏洞以及其利用方式,介绍了当前流行的加密技术及其应用,并强调了培养良好安全意识的必要性。通过综合运用这些策略,可以有效提升个人和企业的网络安全防护水平。
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】39. 梯度下降优化之动量法介绍及其Pytorch实现
【从零开始学习深度学习】39. 梯度下降优化之动量法介绍及其Pytorch实现
|
Oracle 关系型数据库 数据库
Oracle数据恢复—异常断电导致Oracle数据库数据丢失的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxfg用户的数据。 Oracle数据库恢复方案: 检测数据库故障;尝试挂起并修复数据库;解析数据文件。
|
存储 数据挖掘 BI
数据仓库深度解析与实时数仓应用案例探析
随着数据量的不断增长和数据应用的广泛深入,数据治理和隐私保护将成为数据仓库建设的重要议题。企业需要建立完善的数据治理体系,确保数据的准确性、一致性和完整性;同时加强隐私保护机制建设,确保敏感数据的安全性和合规性。
1123 55
|
机器学习/深度学习 自然语言处理 UED
上海科大等开源创新模型:文本生成精美3D服装
【9月更文挑战第4天】上海科技大学等机构近期开源了DressCode模型,可根据文本描述生成精美的3D服装,相关成果已发表于论文《DressCode: Autoregressively Sewing and Generating Garments from Text Guidance》。DressCode采用SewingGPT架构,结合GPT与交叉注意力机制,生成与文本匹配的缝纫模式,并利用预训练的稳定扩散模型生成逼真的PBR纹理。这不仅简化了服装设计流程,还提升了虚拟试穿和数字人创建的可能性。研究显示,DressCode在服装质量和一致性方面超越现有技术,具有广泛应用潜力。
273 2
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
507 0
|
存储 网络协议 数据处理
【Socket】解决UDP丢包问题
UDP(用户数据报协议)是一种无连接的传输层协议,因其不保证数据包的顺序到达和不具备内置重传机制,导致在网络拥塞、接收缓冲区溢出或发送频率过快等情况下容易出现丢包现象。为应对这些问题,可以在应用层实现重传机制、使用前向纠错码等方法。这些方法在一定程度上可以缓解UDP通信中的丢包问题,提高数据传输的可靠性和效率。
|
运维 自然语言处理 Kubernetes
如何在 ACK 中使用 MSE Ingress
本文将为大家分享一下 Ingress 标准 和 实现的趋势,介绍一下 MSE Ingress 在这个趋势下的优势和实践,为大家做关键入口选择多一些参考。
750 100
如何在 ACK 中使用 MSE Ingress
|
前端开发 网络协议 JavaScript
如何在前端实现WebSocket发送和接收TCP消息(多线程模式)
请确保在你的服务器端实现WebSocket的处理,以便它可以接受和响应前端发送的消息。同时,考虑处理错误情况和关闭连接的情况以提高可靠性。
1192 0
|
监控
135 日志监控告警系统案例(数据模型设计)
135 日志监控告警系统案例(数据模型设计)
363 0