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;
}


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React小记(一)_基础部分

1、项目搭建与结构 2、类组件和函数组件 主要区别&#xff1a;1、函数组件没有生命周期2、函数组件没有this指向3、函数组件没有状态4、函数组件通过hooks实现各种操作5、props在函数的第一个参数接收6、函数体相当于类组件的render函数import React from reactfunction App()…

AI 到底是什么?

AI到底是什么&#xff1f; AI&#xff08;Artificial Intelligence&#xff09;指的是一种可以制造计算机程序的计算机科学工程&#xff0c;也是当前计算机学科中的一个研究分支。把“Artificial Intelligence”翻译为“人为再造情报”更贴合它在当前落地项目中的工作场…

[CUDA编程] cuda graph优化心得

CUDA Graph 1. cuda graph的使用场景 cuda graph在一个kernel要多次执行&#xff0c;且每次只更改kernel 参数或者不更改参数时使用效果更加&#xff1b;但是如果将graph替换已有的kernel组合&#xff0c;且没有重复执行&#xff0c;感觉效率不是很高反而低于原始的kernel调用…

Linux-笔记 设备树插件

目录 前言&#xff1a; 设备树插件的书写规范&#xff1a; 设备树插件的编译&#xff1a; 内核配置: 应用背景&#xff1a; 举例&#xff1a; 前言&#xff1a; 设备树插件&#xff08;Device Tree Blob Overlay&#xff0c;简称 DTBO&#xff09;是Linux内核和嵌入式系统…

【Ardiuno】使用ESP32单片机网络功能调用API接口(图文)

接着上文连通wifi后&#xff0c;我们通过使用HTTPClient库进行网络相关操作&#xff0c;这里我们通过http协议进行接口调用。 为了简化操作&#xff0c;小飞鱼这里使用了本地服务器上的文件作为接口&#xff0c;正常操作时会调用接口后&#xff0c;将服务器返回的数据进行解析…

门控循环单元GRU与长短期记忆网络LSTM

门控循环单元与长短期记忆网络 门控隐状态 问题提出&#xff1a;对于一个序列来说不是每个观察值都是同等重要想只记住相关的观察需要&#xff1a; 能关注的机制&#xff08;更新门&#xff09;能遗忘的机制&#xff08;重置门&#xff09; 第一个词元的影响至关重要。 我们…

【第10章】Vue之Element Plus常用组件

文章目录 前言一、表格1. 带斑马纹表格2. 展示 二、分页1.国际化(中文)2.分页代码3. 展示 三、表单1. 表单代码2. 展示 四、卡片1. 卡片代码2. 展示 总结 前言 通过上一章的快速入门&#xff0c;我们已经学习了按钮使用&#xff0c;接下来学习Element Plus的常用组件&#xff…

SQL 快速参考

SQL 快速参考 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;的标准编程语言。它用于执行各种操作&#xff0c;如查询、更新、插入和删除数据库中的数据。本快速参考将提供SQL的基本语法和常用命令&…

意向锁通俗解释

意向锁概念 意向锁&#xff08;Intention Lock&#xff09;是一种数据库并发控制机制&#xff0c;用于协调和管理多个事务对数据库对象&#xff08;如表、行等&#xff09;的并发访问。它通过在数据库对象上加锁来避免事务间的冲突&#xff0c;确保数据的一致性和完整性。 意…

JavaScript之对象

对象 什么是对象 一种数据类型&#xff0c;可以理解为一种无序的数据集合&#xff0c;数组是有序的数据集合 用来描述一个事物&#xff1a;静态特征、动态特征 对象使用 声明语法&#xff1a; //第一种 let 对象名 {属性名&#xff1a;属性值, //多个属性由逗号隔开方法…

826. 安排工作以达到最大收益

826. 安排工作以达到最大收益 题目链接&#xff1a;826. 安排工作以达到最大收益 代码如下&#xff1a; class Solution { public:int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) {vector<…

统计信号处理基础 习题解答10-12

题目&#xff1a; 如果&#xff0c;其中&#xff1a; 对某个&#xff0c;令。证明当时使最大。另外&#xff0c;证明。它们为什么是相同的&#xff1f;如果&#xff0c;基于的的MMSE估计量是什么&#xff1f; 解答&#xff1a; 根据多维高斯分布的定义&#xff0c;可以得到&am…

2024年最新版-Kubeadm快速部署Kubernetes集群(K8S)

Kubernetes集群部署 文章目录 Kubernetes集群部署资源列表基础环境一、环境准备&#xff08;三台主机都要执行&#xff09;1.1、绑定hosts1.2、安装常用软件1.3、关闭交换分区1.4、时间同步 二、Docker环境部署&#xff08;三台主机都要执行&#xff09;2.1、安装依赖包2.2、添…

全志d1 licheerv编译

opensbi sudo apt install gcc-riscv64-linux-gnugit clone https://github.com/riscv-software-src/opensbi.git cd opensbi make CROSS_COMPILEriscv64-linux-gnu- PLATFORMgeneric FW_PICy -j$(nproc)uboot 主线未支持 sudo apt install bison swig flex libpython3.11-d…

有监督学习——线性回归

1. 线性模型 有监督学习是通过已知的样本产生预测模型的学习方法&#xff0c;任何有监督学习模型都可被想象成一个函数&#xff1a; 其中&#xff0c;\(x_1,x_2,x_3…x_n\)是模型的n维的特征值&#xff0c;\(y\)是要预测的目标值/分类&#xff0c;当\(y\)是可枚举的类型时&…

11.docker镜像分层dockerfile优化

docker镜像的分层&#xff08;kvm 链接克隆&#xff0c;写时复制的特性&#xff09; 镜像分层的好处&#xff1a;复用,节省磁盘空间&#xff0c;相同的内容只需加载一份到内存。 修改dockerfile之后&#xff0c;再次构建速度快 分层&#xff1a;就是在原有的基础镜像上新增了服…

探索机器学习:深入理解Sklearn基础

目录 1. 安装与导入Sklearn 2. 数据集的加载与探索 3. 数据预处理 3.1 标准化与归一化 3.2 缺失值处理 4. 数据集划分 5. 选择与训练模型 6. 模型评估 7. 模型优化 7.1 网格搜索 7.2 随机搜索 8. 模型保存与加载 9. 示例项目:鸢尾花分类 10. 更多高级功能 10.1…

2024 年最新 Python 基于百度智能云实现短语音识别、语音合成详细教程

百度智能云语音识别 采用国际领先的流式端到端语音语言一体化建模算法&#xff0c;将语音快速准确识别为文字&#xff0c;支持手机应用语音交互、语音内容分析、机器人对话等场景。百度短语音识别可以将 60 秒以下的音频识别为文字。适用于语音对话、语音控制、语音输入等场景…

CSS实现经典打字小游戏《生死时速》

&#x1f33b; 前言 CSS 中有这样一个模块&#xff1a;Motion Path 运动模块&#xff0c;它可以使元素按照自定义的路径进行移动。本文将为你讲解这个模块属性的使用&#xff0c;并且利用它实现我小时候电脑课经常玩的一个打字游戏&#xff1a;金山打字的《生死时速》。 &…

C++中的拷贝构造函数和赋值运算符重载的定义

在C中&#xff0c;拷贝构造函数&#xff08;Copy Constructor&#xff09;和赋值运算符重载&#xff08;Assignment Operator Overloading&#xff09;是两种特殊的成员函数&#xff0c;它们都与对象的复制操作有关&#xff0c;但在上下文和用途上有所不同。 拷贝构造函数&…