C语言进阶指南(7)(类型转换、整型提升)

欢迎来到博主的专栏C语言进阶指南。
博主id:reverie_ly

显式转换

我们可以将某个表达式强制转换成其他类型。

int i = 25555;
	i = (unsigned char)i;

此时表达式中的i被转换unsigned char类型,数值是211

隐形转换

我们前面已经了解了浮点数和整数的存储形式是完全不一样的,但是在C语言中是可以用int类型的数据接收到float类型的数据的(会发生精度丢失)

float f=3.14
int i=f;//i的值是3

这是因为C语言会对不同的类型进行隐性转换。隐型转换的原因是因为计算机的特性决定的(博主一知半解就不聊了–+)。
隐形转换的规则如下:
1)参与表达式的变量类型与优先级最高的变量类型一致
比如:

int i;
long l;
unsigned int ui;
i+l+ui;

上式中整型i和无符号整型ui会被隐形转换成long类型(因为long类型的数据占用8字节,高于其他两位)
C语言中隐形转换的优先级如下:
1、如果整数类型与浮点型进行算术运算,那么整数类型总是转换成浮点型
2、如果整数类型占用的字节相同,那么有符号整型总是转换成无符号整型参与计算

int i=-10;
unsigned int ui=10;
if (ui > i)
		printf("ui>i");
	else
		printf("ui<i");

如果i是有符号整型,那么这个表达式是真的,但是实际上这个判断表达式是0(false)。结果是打印ui<i.
3、如果操作数的类型不一致,那么占用内存低的会被隐形转换为操作数中占用内存高的数据类型
浮点数数据的类型大小为:long double>double>float
整数数据的类型大小为:long long int>long int>int>short int>char.

2)表达式的结果类型与赋值操作的左值一致
无论左值的类型是什么,表达式的结果总会被转换成与左值一致的类型

	int i = 25555;
	char ch = -1;
	ch = i + ch;

ch的结果为-46.没有被隐形转换

注意隐形转换在表达式结束后就会消失,不会说变量a在表达式中隐形转换成long类型之后就是long类型的变量。

不足缺省整型(int)的整数类型参与计算时总是会被隐形提升为int类型。这种类型有:short,unsigned short,char,unsigned char。这些类型在参与算术计算时,如果没有被隐式转换成int及int类型以上的类型,那么都会被转换成int类型。

整型提升

一个8位的数据(char或unsigned char),如何转换成一个32位的数据(int 或unsigned int)呢?
当发生这种位数的扩大时,发生的便是整型提升。整型提升的方法如下:
如果是有符号整型:根据符号位的位数来提升,如果从32位提升至64位整数,如果int型的符号位为1,整型提升的过程就是在最高位补1.比如-1的存储位数为
11111111 11111111 11111111 11111111
整型提升后
(11111111 11111111 11111111 11111111) 11111111 11111111 11111111 11111111
括号中是被提升的位数
如果是无符号整型,那么提升的过程就只在最高位补0.

数据截断

数据不仅能转换成更高位,还能转换成更低位。

int i=2555;
unsigned char ch=i;//i被转换成char类型

截断的方法如下:只保留后面符合转换类型的数位。比如上面的i的内存储存是
00000000 00000000 00001001 11111011
截断后只剩下符合unsigned char类型的后八个数位,即
11111011
ch的值为251。
注意无论是截断还提升都是只发生在表达式中的。并不会把i的实际数据类型变换,在这个表达式过后i还是int类型

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值