C语言类型转换理解不同的基本类型为什么能够进行运算

embedded/2024/10/17 12:19:22/

类型转换

  • 1.类型转换
    • 1.1隐式转换
      • 1.2常用算术转换
      • 1.2强制类型转换

1.类型转换

在执行算数运算时,计算机比C语言的限制更多。为了让计算机执行算术运算,通常要求操作数用相同的大小(即为的数量相同),但是C语言却允许混合使用基本类型。在这过程是由于编译器会自动进行隐形转换,当然C语言也允许程序员使用强制运算符执行显示转换。
首先讨论隐式转换

1.1隐式转换

在这里插入图片描述
解释最常用的算术转换

1.2常用算术转换

算数转换多用于二元运算符的操作数上,算数转换是为了能安全地使用两个操作数我们需要相应的数据类型。也就是往往我们进行提升,通俗来说就是一个存储字节大的类型和一个存储字节小的类型,我们倾向与使用都使用存储字节大的类型
最常用的就是整形提升
表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀
般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。因此,即使两个char类型的相加,在CPU执⾏时实际上也要先转换为CPU内整型操作数的标准⻓度。
执行常用算术转换的规则可以划分成两种情况

  • 任意操作数的类型是浮点型的情况。
    按照float->double->long double,倘若涵盖了混合整数和浮点数类型的情况,那便将整形转换成浮点型
    这就是为什么double sun=1.0/2等于0.000000
    因为默认所给数为整形,1和2都是整形执行除法得到整形0隐性转换成double类型(默认保留六位小数)为0.000000
    而double sum=1.0/2,1.0默认为double类型而2默认为整形,提升整形2被隐性转化为double类型,此时执行的就是为什么除法仅仅要求一个数为浮点数因为另一个操作数会提升
  • 两个操作数的类型都不是浮点型的情况
    int->unsigned int->long int->unsigned long int

尽管提升方便了我们的计算,但也会导致某些隐蔽的编程错误
假设 int a=-10 unsigned int b=10
if(b>a),我们期望该条件为真。但由于提升我们会将有符号数int转换为无符号数unsigned int也就是说我们会把符号位1当成数来表示,因此a会变成一个极大数此时条件为假

1.2强制类型转换

(类型名)表达式


http://www.ppmy.cn/embedded/53840.html

相关文章

使用不同环境的配置文件active profile

在 IntelliJ IDEA 的 Run/Debug Configurations 中,Active profiles 选项通常用于与 Spring Boot 应用程序相关的配置。这是 Spring Boot 特有的一个用来管理不同环境配置的特性,通常用来在开发(dev)、测试(test&#…

开源大数据项目推荐:引领数据时代的创新力量

随着开源项目的蓬勃发展,越来越多的程序员和数据科学家开始关注并积极参与到开源大数据项目中。这些项目不仅推动了技术的进步,也为行业带来了诸多创新应用。本文将推荐几个当前热门的大数据开源项目,分析其技术亮点、实际应用以及对行业的影…

西门子智能电气阀门定位器在冶金生产控制的应用

西门子智能电气阀门定位器在冶金生产控制的应用 1 前 言 在自动化程度越来越高的冶金行业中 ,调节阀起着至关重要的作用,一旦其发生故障, 轻则出现生产事故,停机,停炉影响各级生产指标,生产任务,影响装置的安全运行。重则可能出现人身安全事故,将直接影响家庭的幸福和企…

机器学习算法(二):1 逻辑回归的从零实现(普通实现+多项式特征实现非线性分类+正则化实现三个版本)

文章目录 前言一、普通实现1 数据集准备2 逻辑回归模型3 损失函数4 计算损失函数的梯度5 梯度下降算法6 训练模型二、多项式特征实现非线性分类1 数据准备与多项式特征构造2 逻辑回归模型三、逻辑回归 --- 正则化实现1 数据准备2 逻辑回归模型3 正则化损失函数4 计算损失函数的…

nf_tables

nf_tables nf_tables 是 Linux 内核中的一个组件,属于 netfilter 子系统的一部分。它的作用类似于 iptables,都是用于配置和执行网络相关的规则,实现防火墙的功能。以下是 nf_tables 的一些主要作用和特点: 规则集管理&#xff1…

WPF 深入理解六、ControlTemplate控件模板

ControlTemplate 定义 控件模板用于来定义控件的外观、样式,还可通过控件模板的触发器(ControlTemplate.Triggers)修改控件的行为、响应动画等。 对与WPF当中,每个控件都是无外观的,这意味着我们可以完全自定义其可视元素的外观,但是不能修改其内部的行为&#xf…

AI绘画Stable Diffusion人物背景替换实操教程,让创意无限延伸

大家好,我是画画的小强 Stable Diffusion以其强大的能力可以实现人物背景的更换。本文将带你深入了解如何利用Stable Diffusion中的Inpaint Anything插件快速且精准地实现人物背景的替换,从而让你的图片焕发新生。 前期准备 本文会使用到Inpaint Anyt…

基于CNN卷积神经网络的MQAM调制识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 CNN模型结构 4.2 损失函数与优化 4.3 训练与测试 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff0…