当前位置: 首页 > news >正文

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

显式转换

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

代码语言:c

AI代码解释

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

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

隐形转换

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

代码语言:c

AI代码解释

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

这是因为C语言会对不同的类型进行隐性转换。隐型转换的原因是因为计算机的特性决定的(博主一知半解就不聊了--+)。

隐形转换的规则如下:

1)参与表达式的变量类型与优先级最高的变量类型一致

比如:

代码语言:c

AI代码解释

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

上式中整型i和无符号整型ui会被隐形转换成long类型(因为long类型的数据占用8字节,高于其他两位)

C语言中隐形转换的优先级如下:

1、如果整数类型与浮点型进行算术运算,那么整数类型总是转换成浮点型

2、如果整数类型占用的字节相同,那么有符号整型总是转换成无符号整型参与计算

代码语言:c

AI代码解释

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)表达式的结果类型与赋值操作的左值一致

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

代码语言:c

AI代码解释

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.

数据截断

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

代码语言:c

AI代码解释

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

截断的方法如下:只保留后面符合转换类型的数位。比如上面的i的内存储存是

00000000 00000000 00001001 11111011

截断后只剩下符合unsigned char类型的后八个数位,即

11111011

ch的值为251。

注意无论是截断还提升都是只发生在表达式中的。并不会把i的实际数据类型变换,在这个表达式过后i还是int类型

http://www.jsqmd.com/news/458310/

相关文章:

  • 显卡(Graphics Processing Unit,GPU)架构详细解读
  • 学生成绩管理系统(MySQL)
  • 基于Spring Cloud的电商系统设计与实现——用户与商品模块的研究(下)
  • 完美解决org.mybatis.spring.MyBatisSystemException nested exception is org.apache.ibatis.reflection.Refl
  • 【C语言-第33章 标准输入输出】-002篇
  • 深度解析 Android 开发(影像类 APP 方向)职位:技术全景、面试指南与职业进阶
  • 最新SQL Server 2022保姆级安装教程【附安装包】
  • 【C语言-第34章 字符与字符串的输入输出】-001篇
  • Flutter 组件 genkit 的适配 鸿蒙Harmony 实战 - 驾驭大模型开发套件、实现鸿蒙端 AI 智能流式响应与提示词工程自动化方案
  • Epson M-G366PDG惯性测量单元:精准导航与卓越性能的理想选择
  • 福尔蒂技服团队驻厂年支持1860+工时,一次性良品率达99.27%
  • 基于Java+SSM+Django小工程预算系统(源码+LW+调试文档+讲解等)/小型工程预算软件/小型工程项目预算工具/简易工程预算系统/工程预算软件小型版/小型工程成本估算系统
  • 给SQL server数据库表字段添加注释SQL,附修改、删除注释SQL及演示
  • 最容易上手的AI找谁
  • 为什么你需要OpenClaw?从单Agent到多Agent的进化之路
  • 5 模型评估方法:准确率与混淆矩阵的实战解读
  • ISO9071外的质控实践:福尔蒂研发-QA-中试‘铁三角’机制(含架构与甘特图)
  • 最新最详细的配置Node.js环境教程
  • 私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)
  • flask-django基于python的疫苗发布和接种管理系统的设计与实现
  • 以引擎源码抄写+UE独立游戏相结合
  • 简易星露谷模组二次开发之旅:捐赠追踪、颜色优化与动物状态警告
  • 【2025最新】基于SpringBoot+Vue的船舶维保管理系统管理系统源码+MyBatis+MySQL
  • ros1科学安装方法
  • 行星减速器装配图CAD图纸
  • 超详细:数据库的基本架构
  • 禁止使用存储过程
  • 【毕业设计】SpringBoot+Vue+MySQL 船运物流管理系统平台源码+数据库+论文+部署文档
  • ROS1中的package.xml文件的作用:
  • 5G-A 定位精度提升深度解析