C语言:整型提升

一、什么是整型提升

C语言的整型算术运算至少是以缺省整型类型的精度来进行的。

为了达到这个精度,算术运算表达式中的 字符型char 和 短整型short 需要被转换为普通整型,这种转换成为整型提升。

二、整型提升的意义

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

通用CPU难以直接实现两个8比特位长度(char)或者两个16比特位长度(short)直接相加运算。所以表达式中各种长度小于int长度的整型值都要先转换为 int 或 unsigned int 的长度,然后再送入CPU执行运算。

三、如何进行整型提升

补码的高位补符号位

 

举例(32位环境):

char a=5

char b=126

char c=a+b

 

5的补码:00000000000000000000000000000101

char类型只能存8比特位,所以a中存放的是 00000101

126的补码:00000000000000000000000001111110

char类型只能存8比特位,所以b中存放的是 01111110

 

a+b运算时,需要进行整型提升,a和b各自提升为整型长度

a中存放的是 00000101,符号位是0

a整型提升为 00000000000000000000000000000101

b中存放的是 01111110,符号位是0

b整型提升为 00000000000000000000000001111110

 

a+b得补码:00000000000000000000000010000011

存放于c中为 10000011

printf("%d", c)用%d 打印,c需要整型提升(符号位是1)

c整型提升为 11111111111111111111111110000011

转换为原码 10000000000000000000000001111111

结果:-125

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

四、整型提升的实例

实例1:代码如下

当a,b分别与0xb6、0xb600比较时,即发生了整型算数运算要进行整型提升

a=0xb6,二进制表示为:10110110        整型提升:11111111111111111111111110110110

转换为原码:10000000000000000000000001001010        结果:-0x4A

同理b也要进行整型提升

而c不需要整型提升

所以最后运行结果只打印c

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;
}

 

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

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

相关文章

华为数通方向HCIP-DataCom H12-821题库(单选题:41-60)

第41题 以下关于IS-IS协议说法错误的是? A、IS-IS协议支持CLNP网络 B、IS-IS 协议支持IP 网络 C、IS-IS 协议的报文直接由数据链路层封装 D、IS-IS协议是运行在AS之间的链路状态协议 答案:D 解析: 关于IS-IS协议的说法错误是D. IS-IS协议是运行在A…

Windows运行Spark所需的Hadoop安装

解压文件 复制bin目录 找到winutils-master文件hadoop对应的bin目录版本 全部复制替换掉hadoop的bin目录文件 复制hadoop.dll文件 将bin目录下的hadoop.dll文件复制到System32目录下 配置环境变量 修改hadoop-env.cmd配置文件 注意jdk装在非C盘则完全没问题,如果装在…

python中的matplotlib画折线图(数据分析与可视化)

先导包(必须安装了numpy 、pandas 和matplotlib才能导包): import numpy as np import pandas as pd import matplotlib.pyplot as plt核心代码: import numpy as np import pandas as pd import matplotlib.pyplot as pltpd.se…

机器学习-使用 XGBoost 时间序列预测能源消耗

简而言之,时间序列预测是根据以前的历史数据预测未来值的过程。目前使用时间序列预测的最热门领域之一是加密货币市场,人们希望预测比特币或以太坊等流行加密货币的价格在未来几天甚至更长时间内将如何波动。另一个现实世界的案例是能源消耗预测。尤其是…

智能井盖传感器,物联网智能井盖系统

随着城市人口的不断增加和城市化进程的不断推进,城市基础设施的安全和可靠性变得愈发重要,城市窨井盖作为城市基础设施重要组成部分之一,其安全性事关城市安全有序运行和居民生产生活安全保障。 近年来,各地都在加强城市窨井盖治理…

【2023新教程】树莓派定时自动拍照并上传腾讯云对象存储COS

1 换源 仅适用于Release date: May 3rd 2023、Debian version: 11 (bullseye)这个树莓派OS版本,其他版本不保证有效。 首先使用如下命令,查看自己树莓派的架构。 uname -a结果如下: 如果红圈处显示为aarch64,使用命令sudo na…

【TypeScript】声明文件

在 TypeScript 中,声明文件(Declaration Files)用于描述已有 JavaScript 代码库的类型信息,以便在 TypeScript 项目中使用这些代码库时获得类型支持。 当你在 TypeScript 项目中引用外部 JavaScript 模块或库时,可能会…

设计模式之组合模式(Composite)的C++实现

1、组合模式的提出 在软件开发过程中,使用者Client过多依赖所操作对象内部的实现结构,如果对象内部的实现结构频繁发生变化,则使用者的代码结构将要频繁地修改,不利于代码地维护和扩展性;组合模式可以解决此类问题。组…

【IDEA配置创建类注释模板和方法模板教程】

IDEA配置创建类注释模板和方法模板教程 废话不多说直接上干货 废话不多说直接上干货 先看效果: 类: 方法: IDEA类注释模板 ,配置步骤; 直接用模板: /*** description: ${description}* author: Lynn.OuYang* create: ${YEAR}-${MONTH}-${DAY} ${HOU…

期权分仓开户资金是否安全?具体保障措施有哪些?

网上关于期权分仓系统的真假一直都没有定论,两方人的争论也让很多没有接触过期权分仓系统的人摸不着头脑,那么期权分仓靠谱吗?资金在里面安全吗?下文为大家科普期权分仓开户资金是否安全?具体保障措施有哪些? 一、期权…

LLMs领域适应的预训练Pre-training for domain adaptation

到目前为止,我强调了在开发应用程序时,您通常会使用现有的LLM。这为您节省了大量时间,并可以更快地得到一个工作原型。 但是,有一种情况下,您可能会发现有必要从头开始预训练自己的模型。如果您的目标领域使用的词汇和…

开源容灾备份软件,开源cdp备份软件

数据的安全性和完整性面临着硬件问题、黑客攻击、人为错误等各种威胁。在这种环境下,开源容灾备份软件应运而生,通过提供自动数据备份和恢复,有效地保证了公司的数据安全。 一、开源容灾备份软件的定义和作用 开源容灾备份软件是一种基于开源…

Python Opencv实践 - 直方图显示

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape)#图像直方图计算 #cv.calcHist(images, channels, mask, histSize, ranges, hist, accumulate) #images&…

C语言刷题(16)

第一题 第二题 注意 Printf()可以直接在里面放字符指针进行打印 第三题 第四题 第五题 第六题 第七题 或者

edge浏览器使用jupyter notebook删除快捷键没有用?

按快捷键删除没有用,出现一个黑色方框,里面的数字不断在加 解决方法: 在扩展中将Global Speed控制视频速度的插件关掉,或者将控制速度的快捷键改一下 可以在浏览器设置 》扩展 》管理扩展 里面关掉该插件 可以在Global Speed 的…

论文解读:Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions

发布时间:2022.4.4 (2021发布,进过多次修订) 论文地址:https://arxiv.org/pdf/2112.08088.pdf 项目地址:https://github.com/wenyyu/Image-Adaptive-YOLO 虽然基于深度学习的目标检测方法在传统数据集上取得了很好的结果&#xf…

C++设计模式之适配器模式

一、适配器模式 适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成另一个类所期望的接口,以便两个类能够协同工作。 适配器模式可以解决现有类接口与所需接口不匹配的问题,使得原本因接口不…

Mesa 23.2 开源图形栈现已可供下载

导读作为 Mesa 23 系列的第二个重要版本,Mesa 23.2 开源图形栈现已可供下载,它为 AMD GPU 的 RADV Vulkan 驱动程序带来了新功能,改进了 Linux 游戏,并新增了 Asahi 功能。 Mesa 23.2 的亮点包括 Asahi 上的 OpenGL 3.1 和 OpenGL…

Springboot 实践(8)springboot集成Oauth2.0授权包,对接spring security接口

此文之前,项目已经添加了数据库DAO服务接口、资源访问目录、以及数据访问的html页面,同时项目集成了spring security,并替换了登录授权页面;但是,系统用户存储代码之中,而且只注册了admin和user两个用户。在…

3DXML在线查看与转换工具

3DXML 由软件巨头达索系统推出,是 3D 设计和工程中的关键文件格式,提供了封装和共享 3D 数据的系统方法。 为了将简单性与丰富的数据表示相结合,3DXML 在与 STEP 等其他文件格式相比时展现出其独特的优势,特别是在数据丰富性和紧凑…