隐式类型转换 算术转换

目录

整型提升

间接证明整型提升的代码案例

算术转换 


整型提升

何为整型提升:

C语言的整型算术运算总是至少以缺省(默认)整型类型的精度来进行的

为了获得这个精度,表达式中的字符类型短整型操作数在使用之前被转换为普通整型(int类型),这种传唤就被称为整型提升

整型提升的意义:

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度-般就是int的字节长度,同时也是CPU的通用寄存器的长度

因此,即使两个char类型或者short类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度

如何进行整型提升呢? 

整型提升是按照变量的数据类型的符号位来提升的

当符号位是1时,整型提升时高位补全符号位1

当符号位是0时,整型提升时高位补全符号位0

代码举例:

#include<stdio.h>
int main()
{char c1 = 5;char c2 = 127;char c3 = c1 + c2;printf("%d\n", c3);return 0;
}

c3以%d的形式打印的结果为多少呢,以及c1和c2在相加时是如何整型提升的呢?

代码分析:

常量5和17分别存储在char类型的变量c1和c2中的补码(char长度为1字节)

若常量的值大于了char类型能存放的最大值,就会发生截断

c1和c2整型提升后的补码(按符号位整型提升)

c1 + c2;  c1和c2整型提升后相加的补码存放在c3中:

 

char c3 = c1 + c2;  c3是char类型变量,所以存放时会发生截断:

printf("%d\n", c3);     %d是以十进制的形式打印有符号的整数

那么c3在以%d的形式打印时又会发生整型提升(按符号位整型提升): 

c3的二进制原码转换为十进制为:1*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6 = 124

且c3的最高位(符号位)为1,所以c3以%d的形式打印的结果为:-124 

代码验证: 


注意:无符号的数据类型整型提升时,高位补全直接补0


间接证明整型提升的代码案例

代码案例1:

#include<stdio.h>
int main()
{char a = 0xb6;short b = 0xb600; int c = 0xb6000000; if (a == 0xb6)printf("a");if(b == 0xb600)printf("b");if(c == 0xb6000000)printf("c");return 0;
}

0x --- 以0x开头的数字表示这是一个十六进制的数字

十六进制中的b表示的是11,转换为二进制为:1011

一个十六进制的数字表示4个bit

char a = 0xb6; --- 两个十六进制的数字为8bit,刚好填满char类型的a,且不会发生进位

short b = 0xb600; --- 四个十六进制的数字为16bit,刚好填满short类型的b,且不会发生进位

当 if (a == 0xb6) 和 if(b==0xb600) 比较判断时,就会发生算术运算,那么就必然会发生整型提升

所以 char类型的a 和 short类型的b 就会发生整型提升,a和b的最高位都是1,所以整型提升后的结果就会发生改变,自然判断就不会全等

而int c = 0xb6000000;   int类型的c不会发生整型提升,所以判断会全等,则打印的结果为c 

代码验证:


 代码案例2:

#include<stdio.h>
int main()
{char c = 1;printf("%u\n", sizeof(c));printf("%u\n", sizeof(+c));printf("%u\n", sizeof(-c));return 0;
}

 %u --- 以十进制的形式打印无符号整数

sizeof(c):毫无疑问结果为1字节,以为c为char类型,char的长度为1字节

sizeof(+c) 和 sizeof(-c):正和负表示算术运算,只要cher类型和short类型的数据参与运算,就会发生整型提升,提升为int类型,所以sizeof(+c) 和 sizeof(-c)计算的结果为4

代码验证: 


算术转换 

何为算术转换?

如果某个操作符的各个操作数属于不同的类型(只包括大于等于int类型的类型,也就是说大于等于4个字节),那么除非其中一个操作数的转换为另一个操作数的类型(向上转换,小的字节类型转换为大的字节类型),否则操作就无法进行

举例说明: 

	double d = 3.14159;int n = 10;d + n;

double类型的dint类型的n 算术运算时,就会把 int类型的n 向上转换为 double类型 再进行运算

注意:只是在运算时把 int类型的n 向上转换为 double类型 ,并不会改变n的类型

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

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

相关文章

基于SpringBoot实现轻量级的动态定时任务调度

在使用SpringBoot框架进行开发时&#xff0c;一般都是通过Scheduled注解进行定时任务的开发&#xff1a; Component public class TestTask {Scheduled(cron"0/5 * * * * ? ") //每5秒执行一次public void execute(){SimpleDateFormat df new SimpleDateFormat(…

解决 NullReferenceException: Object reference not set to an instance of an object

在 Unity 中 利用 URDF Importer import UR5e_gripper 的 URDF file 时出现错误&#xff1a; NullReferenceException: Object reference not set to an instance of an object。 理论上是有个Object 是 Null&#xff0c;当我再次检查URDF后仍觉得路径没有写错。 于是我 把Mesh…

软件测试面试200问(含答案+文档)

Part1 1、你的测试职业发展是什么&#xff1f; 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自…

spring的bean注册

bean注册 第三方jar包的类想添加到ioc中&#xff0c;加不了Component该怎么办呢。 可以使用Bean和Import引入jar包&#xff0c;可以使用maven安装到本地仓库。 修改bean的名字&#xff1a;Bean("aaa")使用ioc的已经存在的bean对象&#xff0c;如Country&#xff1a;p…

自定义@AnonymousAccess注解

一.目的&#xff1a; 自定义AnonymousAccess注解&#xff0c;可以直接在controller上添加该注解使请求绕过权限验证进行匿名访问&#xff0c;便于快速调用调试以及部分不需要进行安全验证的接口。而不是每次都需要去SecurityConfig文件中进行修改。 二.流程&#xff1a; 三.实…

通用后台管理(二)——项目搭建

目录 前言 一、安装vue-cli依赖 1、使用yarn下载vue-cli 2、使用npm下载 3、检查一下是否下载成功 二、创建项目 1、创建项目&#xff0c;my-app是项目名称 2、 这里选择vue 2&#xff0c;蓝色表示选中的。 3、启动项目 三、下载项目依赖 四、配置项目 1、修改esli…

VS2019_新建窗体应用文件SOP

文章目录 1. 打开VS2. 创建新项目3. 选择Windows窗体应用4. 起名&#xff0c;选位置&#xff0c;框架版本选择4.5及之后&#xff0c;这里选的4.85. 新建完成 1. 打开VS 2. 创建新项目 3. 选择Windows窗体应用 注意要选.NET的 4. 起名&#xff0c;选位置&#xff0c;框架版本…

原来Kimi不是不作为,而是在准备大招!

月之暗面Kimi 作为一款我每天都在使用的AI智能助手&#xff0c;是真正的帮助我解决了不少工作及日常创作的一些事情。 它的表现能力也是毋庸置疑&#xff0c;不论是业内还是普通人&#xff0c;10个人当中可能就有9个人在使用Kimi。 而昨天&#xff08;7月8日&#xff09;Kimi…

Civil3D 2025:工程设计的智慧之友

初识Civil3D 2025 当我第一次打开Civil3D 2025时&#xff0c;仿佛置身于湘西的山水之间&#xff0c;那种熟悉而又新奇的感觉扑面而来。Civil3D 2025不仅仅是一款软件&#xff0c;它更像是一位老友&#xff0c;带着温暖和智慧&#xff0c;陪伴我走过每一个设计的日夜。 功能丰…

侯捷C++面向对象高级编程(上)-9-扩展补充:类模板、函数模板及其他

1.static 2.把 ctors 放在 private 区 3.cout 4.class template、类模板 5.function template、函数模板 6.namespace

DDR3 SO-DIMM 内存条硬件总结(二)

上一节我们大概了解了下DDR3的大概使用情况&#xff0c;下来我们再顺藤摸瓜再深入学习下ddr3的使用&#xff0c;我们从下面这张内存条开始&#xff1a; 我们看到第二行2GB 1RX8 PC3-10600S-9-11-B2 具体含义上一节已经讲过了&#xff0c;我们深挖下1R*8&#xff0c;他的含义是…

资料分析笔记整理

提升技巧多做题、少动笔、多分析 资料分析认识 国考一般20题(24~28分钟) 统计材料的类型包括单纯的文字、表格、图形以及由这些元素组成的复合类型材料 文字性材料:(30~60秒) 多段落型文字材料(时间、关键词、结构) 孤立段落文字材料(时间、关键词、标点[。;]) 表…

Java语言程序设计——篇二(2)

Java语言基础 运算符与表达式运算符1、算术运算符2、关系运算符3、逻辑运算符&#xff08; &&、||、 !、&、| 、^&#xff09;4、位运算符&#xff08; >>、<<、>>>、&、|、^、~&#xff09;5、赋值运算符6、条件运算符7、字符串运算符8、…

数字化时代下,财务共享数据分析建设之路

随着人工智能、云计算、大数据、区块链等技术&#xff0c;以及衍生出的各种产品的大发展&#xff0c;使得数字化发展的速度再一次加快&#xff0c;也让数字经济和数字化转型得到了更多人的关注和认可。 在传统经济增长逐渐放缓&#xff0c;市场竞争愈发激烈的局面下&#xff0…

GOJS去除水印

GOJS gojs 去除水印 **查找go.js库搜索下面这段文本 String.fromCharCode(a.charCodeAt(g)^b[(b[c]b[d])%256]) 加入这段文本 if(f.indexOf(GoJS 2.1 evaluation)>-1|| f.indexOf(© 1998-2021 Northwoods Software)>-1|| f.indexOf(Not for distribution or produ…

Linux内核网络性能问题的追踪(工具篇)

在现代计算环境中&#xff0c;网络性能对于系统的整体性能至关重要。网络瓶颈不仅会影响数据传输速度&#xff0c;还会影响应用程序的响应时间&#xff0c;最终影响用户体验。为了有效地解决网络性能问题&#xff0c;了解和使用各种追踪工具至关重要。另外一方面&#xff0c;造…

CTF-PWN-kernel-栈溢出(retuser rop pt_regs ret2dir)

文章目录 参考qwb2018 core检查逆向调试打包上传测试脚本retuserkernel ropinit_credcommit_creds( prepare_kernel_cred(0) )开启KPTI利用swapgs_restore_regs_and_return_to_usermode开启KPTI利用SIGSEGVrop设置CR3寄存器再按照没有KPTI返回 kernel rop ret2userpt_regs 构造…

2024年浙江省高考分数一分一段数据可视化

下图根据 2024 年浙江高考一分一段表绘制&#xff0c;可以看到&#xff0c;竞争最激烈的分数区间在620分到480分之间。 不过&#xff0c;浙江是考两次取最大&#xff0c;不是很有代表性。看看湖北的数据&#xff0c;580分到400分的区段都很卷。另外&#xff0c;从这个图也可以…

el-image放大图片功能

1.需求&#xff1a;点击图片后放大图片 html代码&#xff1a; <el-imagestyle"width: 100px; height: 100px":src"baseUrl item.id":zoom-rate"1.2":max-scale"7":min-scale"0.2":preview-src-list"srcList"…

Xilinx FPGA UltraScale SelectIO 接口逻辑资源

目录 1. 简介 2. Bank Overview 2.1 Diagram 2.2 IOB 2.3 Slice 2.4 Byte Group 2.5 I/O bank 示例 2.6 Pin Definition 2.7 数字控制阻抗(DCI) 2.8 SelectIO 管脚供电电压 2.8.1 VCCO 2.8.2 VREF 2.8.3 VCCAUX 2.8.4 VCCAUX_IO 2.8.5 VCCINT_IO 3. 总结 1. 简介…