C语言从头学18——类型的自动转换

2024-06-10 21:12

本文主要是介绍C语言从头学18——类型的自动转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        某些情况下,C语言会自动转换某个值的类型,以下几种情况有必要了解:
   1、赋值运算过程中类型转换
        赋值运算符会自动将右边的值转成左边变量的类型。
        (1) 浮点数赋值给整数变量,C语言会直接丢弃小数部分,而不是四舍五入。如:
              int x=1.99; //x的值是1而不是2
             这种丢弃对于程序运行中数据的精度有影响,编程过程中必须考虑到。
        (2) 整数赋值给浮点数变量,会自动转变成浮点数,这种转变对精度没有影响。
        (3) 窄类型赋值给宽类型,所谓窄类型即是所占字节数较少的类型,反之就是宽类型。这种转换对程序运算精度没有影响。如:
              char a=127;// char类型占1个字节( 类型占字节数用sizeof()可获得 )
              int x=a; // int类型占4个字节
         (4) 宽类型赋值给窄类型,会发生截值(truncation)现象,还是拿 int 转 char 举例,int占4个字节 char 占一个字节,如把一个 int 类型的值赋给 char 类型变量,int 类型4个字节的值只能将最后一个字节的值传给 char,其余3个字节的值都扔掉了。为了保证精度,这种情况应当尽量避免。但有时我们也反其道而用之,比如需要取整时,我们把float类型值或变量赋给 int 类型变量,就可以达到取整的目的。
   2、混合类型运算中的类型转换
       不同类型的值进行计算时,必须先转成同一个类型才能进行计算。
       (1) 整数与浮点数混合运算时,整数先转为浮点数类型再与另一个运算数运算。如:int 会转成
float或double。
       (2) 不同的浮点数类型混合运算时,宽度较小的类型先转为宽度较大的类型再进行运算,如float 会转成 double。
       (3) 不同的整数类型混合运算时,宽度较小的类型会提升为宽度较大的类型,如short会转为 int。
       在做混合运算时,应避免无符号数与有符号数的混合运算。因为这时C语言会自动将有符号数转为无符号数,这种转变可能会超出预期。当然这种情况也极为少见。
      事实上,上述类型的自动转换在我们编程过程中应当尽量避免,因为可能发生不可预见的结果。但有时类型的转换又是必须进行的,下一篇文章将介绍"类型的显示转换"。
     写一个简单的例子对上面的介绍再做进一步的说明:

#include<stdio.h>
int main(void)
{//浮点数赋值给整型float PI = 3.14159, r = 1;int S = r * r * PI; //小数部分被舍去(等号右边先计算出结果后再舍小数)printf("S=%d\n", S); //运行结果:S=3 
//整数赋值给浮点数int a1 = 3;float b1 = a1;//不影响精度printf("float b1=%f\n", b1);//运行结果:float b1=3.000000 
//窄类型赋值给宽类型short a2 = 32767;long b2 = a2;//不影响精度printf("long b2=%d\n", b2); //运行结果:long b2=32767 
//宽类型赋值给窄类型double x1 = 1234567890.123456;float y1=x1; //小数部分和整数部分都有变化,发生错误printf("y1=%f\n", y1); //运行结果:y1=1234567936.000000 
//整数与浮点数混合运算float x2 = 3.14;int a3 = 2; float y3 = a3 * x2; //a3自动转为floatprintf("y3=%f\n", y3); //运行结果:y3=6.280000
//不同宽度浮点类型混合运算float x3 = 0.511; double x4 = 0.722111;double y4 = x3 + x4;//x3自动转成doubleprintf("y4=%f\n", y4); //运行结果:y4=1.233111getchar(); //阻塞程序运行return 0;
}


 

这篇关于C语言从头学18——类型的自动转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049278

相关文章

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

Python轻松实现Word到Markdown的转换

《Python轻松实现Word到Markdown的转换》在文档管理、内容发布等场景中,将Word转换为Markdown格式是常见需求,本文将介绍如何使用FreeSpire.DocforPython实现... 目录一、工具简介二、核心转换实现1. 基础单文件转换2. 批量转换Word文件三、工具特性分析优点局

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

使用C#实现将RTF转换为PDF

《使用C#实现将RTF转换为PDF》RTF(RichTextFormat)是一种通用的文档格式,允许用户在不同的文字处理软件中保存和交换格式化文本,下面我们就来看看如何使用C#实现将RTF转换为PDF... 目录Spire.Doc for .NET 简介安装 Spire.Doc代码示例处理异常总结RTF(R

C# WebAPI的几种返回类型方式

《C#WebAPI的几种返回类型方式》本文主要介绍了C#WebAPI的几种返回类型方式,包括直接返回指定类型、返回IActionResult实例和返回ActionResult,文中通过示例代码介绍的... 目录创建 Controller 和 Model 类在 Action 中返回 指定类型在 Action