再学C语言17:类型转换

news2024/11/19 18:44:22

语句和表达式通常只应该使用一种类型的常量和变量

如果使用混合类型,C将会使用一个规则集合自动完成类型转换

一、基本的规则

1)当出现在表达式中时,有符号和无符号的char类型和short类型都将自动被转换为int(在需要的情况下将自动被转换为unsigned int);在K&R C下,float将被自动转换为double;因为这种自动转换都是将原来的类型转换为较大的类型,所以被称为提升

2)在包含两种数据类型的任何运算中,两个值都被转换为两种数据类型中较高的级别

3)类型级别从高到低:long double > double > float > unsigned long long > long long > unsigned long > long > unsigned int > int;当long和int具有相同大小时,unsigned int > long;short和char会被自动提升为int或unsigned int

4)在赋值语句中,计算的最后结果被转换为将要被赋值的那个变量的类型;该过程可能导致提升,也可能导致降级(demotion,将一个值转换成一个更低级的类型)

5)当作为函数的参数进行传递时,char和short会被转换为int,float会被转换为double

升级通常是一个无损害的过程,但是降级可能导致问题:令数据丧失精度

示例代码:

#include <stdio.h>
int main(void)
{
    int i = 1000;
    char c;
    c = i;
    printf("The value of c is %c \n", c);
    return 0;
}

运行结果:

debec7679a594b14827b9b116d461514.png

二、指派运算符

通常应该避免自动类型转换,尤其是避免降级

当需要准确的类型转换时,可以使用指派(cast),即在变量前面放置用圆括号括起来的被希望转换成的类型名,圆括号和类型名一起构成指派运算符(cast operator)

示例代码:

#include <stdio.h>
int main(void)
{
    int a, b;
    float c;
    a = 1.1;
    b = (int) 1.1;
    c = (float) 1;
    printf("%d %d %f \n", a, b, c);
    return 0;
}

运行结果:

8820090e1d8a4f24827188e749b42435.png

三、带有参数的函数

函数中的变量名是局部的。不会与函数外部程序其他地方的相同名称冲突

原型(prototype)是一个函数声明,描述函数的返回值和它的参数

一般如果需要在main()函数中调用某函数,其函数声明需要放在main()函数之前

在需要使实际参数的类型与原型保持一致时,编译器会自动插入类型指派,将实参转换为形参的类型

示例代码:

#include <stdio.h>

int summ(int a, int b); // 原型

int main(void)
{
    int sum1;
    int sum2;
    
    sum1 = summ(10, 20); // 调用1
    sum2 = summ(10.5, 20.8); // 调用2
    printf("sum is %d %d \n", sum1, sum2);
    return 0;
}

int summ(int a, int b)
{
    int res;

    res = a + b;
    return res;
}

运行结果:

7d2cefdaebe64cc5b8813e7967f6efac.png

好的编程习惯之一是不依赖于自动类型转换

 

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

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

相关文章

新华三“智・行中国2022”|大厂行动,如何擘画“内循环”的数字未来?

作者 | 曾响铃 文 | 响铃说 继农业经济、工业经济之后&#xff0c;数字经济登上历史的舞台&#xff0c;成为大国的主要经济形态。在我国&#xff0c;根据中国信息通信研究院发布的《中国数字经济发展白皮书&#xff08;2022年&#xff09;》&#xff0c;截至2021年&#xff0…

关于浙大MPA复试的一些常规问题

2022年联考笔试刚刚落下帷幕&#xff0c;就收到很多小伙伴关于浙大MPA项目复试的问题咨询&#xff0c;趁着今天有空就大家问的一些问题在这里统一做个回复哦~1、问&#xff1a;正常情况下多少分可以进入浙大MPA项目复试&#xff1f; 答&#xff1a;统计了2018——2022浙大MPA项…

Harmony/OpenHarmony应用开发-转场动画组件内转场

组件内转场主要通过transition属性配置转场参数&#xff0c;在组件插入和删除时显示过渡动效&#xff0c;主要用于容器组件中的子组件插入和删除时&#xff0c;提升用户体验&#xff08;需要配合animateTo才能生效&#xff0c;动效时长、曲线、延时跟随animateTo中的配置&#…

GitHub官网下载Axios.js步骤

目录 前言必读 一、下载步骤 1.进入GitHub官网 2.搜索axios 3.点击这个axios/axios 4.点击压缩包下载 5.解压&#xff0c;进入到dist文件里面就找到了 二、使用方法 前言必读 读者手册&#xff08;必读&#xff09;_云边的快乐猫的博客-CSDN博客 一、下载步骤 1.进入…

数据在内存中的存储(11)

目录 1、数据类型介绍 1、类型的基本归类 1、整形家族&#xff1a; 2、浮点数家族&#xff1a; 3、构造类型&#xff08;自定义类型&#xff09;&#xff1a; 4、指针类型&#xff1a; 5、空类型&#xff1a; 2、整形在内存中的存储 1、原码、反码、补码 2、大小端介…

[框架]Mybatis的使用

目录一、数据持久化的概念及ORM&#xff08;Object Relational Mapping “对象关系映射”&#xff09;的原理1.1 持久化1.2 ORM&#xff08;Object Relational Mapping&#xff09;1.3 ORM解决方案&#xff08;包含四个部分&#xff09;二、MyBatis简介2.1 简介2.2 特点2.3 MyB…

数据结构-考研难点代码突破(C++实现无向图图最小生成树算法(Prim,Kruskal)图解操作细节(引自C语言中文网))

以代码的方式复习考研数据结构知识点&#xff0c;这里在考研不以代码为重点&#xff0c;而是以实现过程为重点 文章目录1. 无向图最小生成树算法Kruskal算法C代码实现Prim算法C代码实现1. 无向图最小生成树算法 常见基本概念记忆&#xff1a; 生成树定义&#xff1a; 无向图中…

MySQL索引相关知识

1、什么是索引&#xff1f; 索引是存储引擎用于提高数据库表的访问速度的一种数据结构。通过给字段​​添加索引​​​可以​​提高数据的读取速度​​​&#xff0c;提高项目的并发能力和抗压能力。​​索引优化​​​时mysql中的一种优化方式。索引的作用相当于​​图书的目录…

一文搞懂Linux内核进程原理及系统调用机制

进程四要素 有一段程序代其执行有进程专用的系统堆栈空间在内核有task_struct数据结构进程有独立的存储空间&#xff0c;拥有专有的用户空间 如果具备前三点缺少第四条&#xff0c;称为“线程”&#xff1b;如果完全没有用户空间&#xff0c;称为“内核线程”;如果共享用户空间…

中国剩余定理

最近总是用到中国剩余定理&#xff0c;以前对于这个定理非常的模糊&#xff0c;有时间静下心来简单的学习一下中国剩余定理&#xff0c;文章没有深度&#xff0c;写下这篇博客以作记录。 中国剩余定理CRT前言一、描述二、中国剩余定理求解方法1.除以三余二2.除以五余三3.除以七…

14. UserAgent 反爬是如何实现的,来看看这篇博客

本篇博客实现 【爬虫训练场】 的第一个反爬案例&#xff0c;User-Agent 反爬。 文章目录什么是 User-Agent 反爬在 Python Flask 中实现 User-Agent 反爬什么是 User-Agent 反爬 User-Agent 反爬是一种防止网站被爬虫爬取的技术。 当爬虫向网站发送 HTTP 请求时&#xff0c;会…

初识Kubernetes:(3)Kubernetes资源管理

初识Kubernetes&#xff1a;&#xff08;3&#xff09;Kubernetes资源管理1 资源管理介绍2 YAML语法介绍2.1 YAML语法介绍2.2 YAML语法示例2.2.1 YAML常量2.2.2 对象2.2.3 数组3 资源管理方式3.1 资源管理方式3.2 命令式对象管理3.2.1 kubectl命令3.2.2 操作&#xff08;comman…

操作系统期末考试必会题库2——进程管理

1、某系统出现故障&#xff0c;通过相关指令查看&#xff0c;CPU占有率为0&#xff0c;内存有大量空余&#xff0c;但是用户在其程序中得不到任何相应&#xff0c;请从进程状态分析&#xff0c;当前用户所使用的进程可能是什么状态&#xff08;就绪&#xff0c;运行&#xff0c…

BLE 蓝牙抓包分析

1. 抓包工具 Ellisys & Ellisys Bluetooth Analyzer ​使用方法&#xff1a;https://blog.csdn.net/weixin_44260005/article/details/121216529​ 2. BLE数据样式 3. 数据分析 3.1 ble蓝牙协议栈 3.2 BLE连接过程 http://doc.iotxx.com/BLE%E6%8A%80%E6%9C%AF%E6%8F%AD%…

如何用Alluxio加速云上深度学习训练?

欢迎来到【微直播间】&#xff0c;2min纵览大咖观点 随着企业数据量的不断增加&#xff0c;为了提高深度学习训练的准确性、加快速度并且降低成本&#xff0c;许多企业开始逐步在云上实施分布式训练的方案&#xff0c;本期内容将结合阿里、微软等实际应用案例&#xff0c;分享…

容器安装mysql

1.自己配置仓库和挂载 仓库内容如下 挂载 2.安装工具包 yum install -y yum-utils 3.从阿里云添加docker仓库 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 我们就能查看到 4.cd回主目录开始一系列安装 yum install d…

软件测评师教程之软件测试基础<一>更新中...

目录一.软件测试分类(1)按照开发阶段划分(2)按照测试实施组织划分(3)按照测试技术划分二.软件测试过程模型(1)V模型(2)W模型(3)H模型(4)X模型(5)前置测试模型(6)测试模型的使用三.软件测试策略(1)测试信息流(2)分析设计阶段1.需求说明书评测2.概要设计说明书评测3.详细设计说明…

手绘图说电子元器件-控制与保护器件

控制与保护器件主要包括继电器、开关、接插件和保险器件等,是电子电路中经常使用的器件。 继电器 继电器是一种常用的控制器件,它可以用较小的电流来控制较大的电流,用低电压来控制高电压,用直流电来控制交流电等,并且可实现控制电路与被控电路之间的完全隔离。 继电…

IPV6探测

目录本机是否支持IPv6如何确认一个网站是否开启 IPv6在线工具&#xff1a;IP查询在线工具&#xff1a;IPv6连接测试在线工具&#xff1a;国家IPv6发展监测平台本地工具局域网设备探测pingMSFThc-Ipv6Ipv6-Toolkit端口探测MSFNmap【存在问题】参考领导提了个问题&#xff0c;怎么…

Mybatis 解析mapper过程

Mapper配置的四种方式 配置方法一共有四种&#xff0c; 分别对应四种解析方式&#xff0c;从解析源码可以看出来 private void mapperElement(XNode parent) throws Exception { //添加接口映射器if (parent ! null) {for (XNode child : parent.getChildren()) { //获取所有…