C语言——隐式转换

news2025/1/14 18:32:55

目录

前言

隐式转换

1.整型提升

2.算数转换


前言

这里小编给大家简单的补充一下,一些有关C语言的知识点


隐式转换

由于转换形式的不同类型转换这里一共分为整型提升和运算转换两种形式

1.整型提升

在了解整型提升之前,这里我们需要先了解一下截断这个概念,对于截断操作,这里我举个例子给大家简单的说明一下

这里我们举一个例子,这里char a=1,但是对于char存储的大小仅仅只是8字节,那么对于常量1,这里却是一个整型,占了32字节,那么为了存储这个变量我们这里就会发生截断操作,对于截断的规则如下:从低位开始,选取处该需要存储的字节大小。

也即是:

 所以存储在变量a中也就是0 0  0 0  0 0 0 1。

那么整型提升又是什么呢?

C的整型算术总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中字符和短整型操作数在使用之前被转化为普通整型,这种转化就叫做整型提升。

整型提升的意义:
1.表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。
2.通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转
换为int或unsigned int,然后才能送入CPU去执行运算。

那么对于整型提升的具体过程又是怎么的呢?

这里我们以char类型给大家简单演示一下:

大家可能平时会见到这样的代码:

int main()
{
	char a = 127;
	char b = 3;
	char c = a + b;
	printf("%d", c);
	return 0;
}

这里我们先直接看结果:

 大家都知道有符号得char类型得表示范围是-127~128,那么这里就不会出现存储130值的char类型,那么该又是怎么得到-126这个值的呢?

这里其实就发生了整型提升和截断的两个过程

首先我们进行运算就需要进行整型提升:

127的补码如下: 

 01111111

进行整型升后得到的是

00000000000000000000000001111111

3的补码是

00000011

整型提升后的值是:

00000000000000000000000000000011

然后我们把整型提升后的值进行相加得到:

00000000000000000000000010000010.

然后我们需要将其存入c,因为c是char类型,所以这里我们要对其进行截断操作,那么我们得到c的补码是:10000010。

然后我们对其进行打印操作,由于我们是将其按整型的形式打印出来,所以这里我们要进行整型提升,也就得到:11111111111111111111111110000010.

由于该是负数,这里我们就需要将其转化为原码输出,所以这里我们转换成原码后得到

10000000000000000000000001111110.

所以这里按二进制转十进制后,得到的值是:-126.

2.算数转换

对于小于整型的情况我们使用的是整型提升的方式,但是对于大于int的类型,我们采用的是算数转换的方式。那么对于算数转换的规则是:
int->unsigned int->long int->unsigned long int->float->double->long double

这里给大家简单举一个例子,这里我们使用到sizeof函数,这里有一点我们需要注意的是sizeof的返回值是unsigned int,那么下面我们直接看代码

int main()
{
	int i = -1;
	if (i < sizeof(i))
	{
		printf("haha");
	}
	else
	{
		printf("hehe");
	}
}

这里如果没有隐式转换,那么我们得到的值应该是haha,但是由于我们 i变量发生了隐式转换,遂于-1的无符号数,该是特别大的,所以我们这里的打印值应该是呵呵。

这里我们看运行结果:

 

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

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

相关文章

自媒体助手软件开发需具备哪些功能?

自媒体助手软件开发需具备哪些功能&#xff1f; 1、多平台多账号管理。 用户可以在单独的平台上管理其他平台的账号&#xff0c;不需要登录多个平台&#xff0c;为用户减少了大量的时间&#xff0c;与此同时可以记忆账号和密码&#xff0c;提供分组管理&#xff…

【C进阶】详解预处理指令

文章目录 预定义符号#define#define定义标识符#define定义宏#define替换规则#和##带副作用的宏参数宏和函数对比#undef命令行定义 条件编译文件包含头文件被包含的方式嵌套文件包含 其他预处理指令总结 预定义符号 __FILE__ //进行编译的源文件 __LINE__ //文件当前的行号 __DA…

解码星地一体农机导航:无网作业,极致

星地一体系列农机导航最强大之处是在全国任何地方都拥有信号&#xff0c;即使是在偏远的戈壁滩也能作业&#xff0c;因为星地一体系列导航采用星地融合技术&#xff0c;彻底解决信号问题&#xff0c;通过卫星播发差分信号的服务&#xff0c;在中国&#xff0c;只要可见卫星&…

Windows下如何查看某个端口被谁占用被杀死占用进程

开发时经常遇到端口被占用的情况&#xff0c;这个时候我们就需要找出被占用端口的程序&#xff0c;然后结束它&#xff0c;本文为大家介绍如何查找被占用的端口。 1、打开命令窗口(以管理员身份运行) 开始—->运行—->cmd&#xff0c;或者是 windowR 组合键&#xff0c;…

Win10桌面我的电脑怎么调出来?最简单方法教学

Win10桌面我的电脑怎么调出来&#xff1f;有用户发现自己的电脑桌面没有我的电脑这个程序图标&#xff0c;每次要访问磁盘的时候&#xff0c;开启都非常的麻烦。那么怎么将这个图标设置到桌面显示呢&#xff1f;接下来我们一起来看看以下的解决方法吧。 方法一&#xff1a; 在开…

论文中参考文献的引用

论文中参考文献的引用 写在最前面删除特定格式的数字&#xff08;带小中大括号等等&#xff09;效果如下 设置参考文献格式设置编号格式设置段落格式效果 使用交叉引用去引用这些编号在需要插入参考文南引用的地方使用“交叉引用”快捷键进阶:为“交叉引用”设置快捷键 写在最前…

maven安装及配置IDEA

文章目录 下载下载完成后 解压可以得到如下的目录项 配置环境变量输入下列命令 出现 maven版本表示环境变量配置成功 配置本地仓库、镜像仓库、jdk版本配置本地仓库配置镜像仓库配置jdk版本 IDEA配置maven配置当前项目的maven配置其他项目的maven 下载 https://maven.apache.o…

威联通NAS文件共享 - 搭建SFTP服务并内网穿透实现在外远程访问

文章目录 前言1. 威联通NAS启用SFTP2. 测试局域网访问3. 内网穿透3.1 威联通安装cpolar内网穿透3.2 创建隧道3.3 测试公网远程访问 4. 配置固定公网TCP端口地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址4.3 测试使用固定TCP端口地址远程连接威联通SFTP 转载自远程内…

Java web 项目 和 java 项目的区别

一、Java Web项目 和 java项目区别 1. Java Web项目是基于Java EE类的&#xff1b;而Java项目是基于Java应用程序的。 2. Java Web项目是网页的编码&#xff0c;像jsp,servlet,struts这类的&#xff0c;而java项目是AWT,SWING这类的编码。 3. Java Web项目中的JAVA文件是tomcat…

【CocosCreator入门】CocosCreator组件 | Layout(布局)组件

Cocos Creator 是一款流行的游戏开发引擎&#xff0c;具有丰富的组件和工具&#xff0c;其中的Layout组件是一种用于实现节点自适应布局的重要组件。它可以根据不同的布局方式&#xff0c;自动调整子节点的位置和大小&#xff0c;从而实现节点的自适应布局。 目录 一、组件介绍…

准备换工作的看过来~

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;得准备面试了&#xff0c;又不知道从何下手&#xff01;为了帮大家节约时间&#xff0c;特意准备了一份面试相关的资料&#xff0c;内容非常的全面&#xff0c;真的可以好好补一补&#xff0c;希望大家在都能拿到理想…

运行时内存数据区之方法区(二)

方法区的演进细节 首先明确&#xff1a;只有HotSpot才有永久代。BEA JRockit、IBMJ9等来说&#xff0c;是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节&#xff0c;不受《]Va虚拟机规范》管束&#xff0c;并不要求统一。Hotspot中方法区的变化&#xff1a; …

Spring核心-IoC控制反转详解 (典藏版)

文章目录 1.IoC容器和Bean介绍2.Spring 中的 IoC 容器2.1 BeanFactory和ApplicationContext概述2.2 BeanFactory2.3 ApplicationContext2.4 BeanFactory vs ApplicationContext2.5 容器的初始化2.6 配置元数据2.6.1 基于XML的容器配置2.6.2 基于注解的容器配置2.6.3 基于Java类…

Junit概述和快速入门

单元测试概述 在程序中&#xff0c;一个单元可以是一个完整的模块&#xff0c;但它通常是一个单独的方法或者程序 在面向对象的编程中&#xff0c;一个单元通常是整个界面&#xff0c;例如类&#xff0c;但可能是单个方法 JUnit是一个java编程语言的单元测试框架 通过先为最…

教育大数据总体解决方案(4)

组件配置 对组件中的项目配置项进行管理&#xff0c;包括节点内容、磁盘空间等等。每一次的配置都以一个配置版本的形式进行保存&#xff0c;用户可选择对应版本的查看对应的配置信息。 测度 对组件内的相关服务指标以图标形式进行状态呈现。可选择相应时间段&#xff0c;查看对…

scala闭包与柯里化

目录 通过闭包实现一个通用的两数相加函数简化柯里化 闭包&#xff1a;如果一个函数&#xff0c;访问到了它的外部&#xff08;局部&#xff09;变量的值&#xff0c;那么这个函数和他所处的环境&#xff0c;称为闭包 通过闭包实现一个通用的两数相加函数 这里内层函数访问了外…

【基础】Kafka -- 主题与分区

Kafka -- 主题与分区 主题的管理创建主题简单创建与查看指定分区副本分配创建指定参数创建 查看主题主题的简单查看带附加功能的查看 修改主题修改分区修改配置 删除主题 主题配置管理配置查看与变更配置查看配置变更 主题端参数 KafkaAdminClient 主题管理基本使用创建主题查看…

【创作赢红包】SQL Server之索引设计

SQL Server之索引设计 一、前言二、索引设计背景知识2.1、索引设计策略包括的任务 三、常规索引设计3.1、数据库注意事项3.2、查询注意事项3.3、列注意事项3.4、索引的特征3.5、索引排序顺序设计指南 总结 一、前言 索引设计不佳和缺少索引是提高数据库和应用程序性能的主要障…

【Spring Data Jpa】原生Jpa的使用

【Spring Data Jpa】原生Jpa的使用 1. Dependency2. Config1.1 persistence.xml1.2 Entity1.3 application.properties 3. Test4. 原生JdbcTemplate 5. Awakening 1. Dependency <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-e…

本地连接github

本地连接github 想要通过github把本地代码同步一下&#xff0c;但是每次换一个电脑都要重新搜索如何配置连接github&#xff0c;趁着这次机会把电脑配置的时候记录一下&#xff0c;到时候找起来方便一点 一、git环境配置 1、首先安装git 找个安装包直接安装就行 2、配置用…