表达式求值 - 整形提升和截断

文章目录

  • 一、整形提升
  • 二、为什么要整形提升?
  • 三、截断
  • 四、示例
    • 1,2
    • 3
      • ① c1 + c2
      • ② c3 = c1 + c2
    • 4

一、整形提升

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

所以,整形提升的对象是:字符类型(char),短整形(short)。

示例如下:
在这里插入图片描述
注意: 整形提升是对补码进行的操作。

二、为什么要整形提升?

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。
因此,即使两个char类型的变量相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。

三、截断

截断指的是长字节类型在转换成长字节类型时,进行的取部分比特位的现象。

示例如下:
在这里插入图片描述
注意: 截断是对补码进行的操作。

四、示例

截断和整形提升一般会同时出现,而且很容易被忽略,下面通过一个示例来具体了解一下截断和整型提升。

int main()
{char c1 = 5;		// 1char c2 = 127;		// 2char c3 = c1 + c2;  // 3printf("%d\n",c3);  // 4
}

为了方便描述,将上面的几行代码进行了标号,下面我们一部分一部分的看。

1,2

char c1 = 5;		// 1
char c2 = 127;		// 2

12 是初始化操作,分别将 5127 赋值给 c1c2,但是 5127 是整形,属于 int 类型,而 c1c2char 类型的,所以赋值时由于类型转换会发生的截断。

注意: 截断是对补码进行的操作,而 5127 都是正数,原码 = 反码 = 补码。

在这里插入图片描述
所以 c1 的值就是 0000 0101(二进制),c2 的值是 0111 1111(二进制)。

3

char c3 = c1 + c2;  // 3

① c1 + c2

c1c2char 类型 ,两者要相加,需要进行整形提升,都成为 int 类型后,才能做加法。

  • 首先我们来看补位要补什么?
    ① 有符号的类型,高位是符号位,根据符号位补,符号位是几就补几。
    ② 无符号的类型,由小到大转化,缺位直接补0
    在这里插入图片描述
  • c1 和 c2 整形提升
    char 类型是有符号类型,两个的最高位都是 0,所以补位都补 0
    在这里插入图片描述
  • c1 和 c2 相加
    在这里插入图片描述
    两个 int 类型相加得到的结果也是 int 类型的。

② c3 = c1 + c2

  • 赋值时发生截断
    刚才我们得到了c1c2相加的结果,是 int 类型的,但该结果要赋值给 char c3(1 个字节),从 intchar 需会发生截断。
    在这里插入图片描述
    所以 c3 的值就是 1000 0100 了。

4

printf("%d\n",c3);  // 4

%d 打印的内容是 10 进制的有符号整形。

  • 所以首先就是将 char 类型的 c3 整形提升成int类型:
    在这里插入图片描述
    char 类型是有符号类型,符号位是 1,根据符号位进行补位都补 1

  • 然后就是打印 10 进制数字,但此时我们得到的值的补码,要想得到 10 进制数字,需要转成原码,转换规则如下:
    在这里插入图片描述
    转换结果:
    在这里插入图片描述
    所以最终打印出来的结果是 -124


本文到这里就结束了,如果对您有帮助,希望得到一个赞!🌷
如有错漏,欢迎指正!😄

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

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

相关文章

深度学习基础之前馈神经网络

目录 基本结构和工作原理 神经元和权重 激活函数 深度前馈网络 应用场景 优缺点 深度前馈神经网络与卷积神经网络(CNN)和循环神经网络(RNN)的具体区别和联系是什么? 具体区别 联系 如何有效解决前馈神经网络…

爬虫案例4——爬取房天下数据

简介:个人学习分享,如有错误,欢迎批评指正 任务:从房天下网中爬取小区名称、地址、价格和联系电话 目标网页地址:https://newhouse.fang.com/house/s/ 一、思路和过程 目标网页具体内容如下: ​​​​ …

成为Python砖家(3): 何时产生字节码 .pyc 文件

好奇:.pyc和 __pycache__是啥? 你是否好奇,在某些 Python 工程中,当执行了 xxx.py脚本后,多出了 __pycache__目录?这个目录下存放的是一些 .pyc结尾的文件。 这些文件,叫做 python bytecode。 …

深度剖析数字媒体产业链的无限潜力与创新生态

在当今信息爆炸的时代,数字媒体产业链正以势不可挡的姿态展现出其令人瞩目的无限潜力与创新生态。 数字媒体的发展潜力简直无可限量。从在线视频的爆发式增长,到虚拟现实和增强现实技术带来的沉浸式体验,再到社交媒体平台上丰富多彩的内容创…

Windows 应用程序加密 - 功能强大、可定制、开源且完全免费

先进而优雅的 Windows 应用程序加密 - 功能强大、可定制、开源且完全免费! 项目地址:FadCrypt GitHub 工作原理: 1. 密码创建:设置密码后,密码会与锁定应用程序的配置文件一起加密保存。监控期间,这些文…

望繁信科技入选2024年第3批上海市高新技术成果转化项目名单

近日,上海望繁信科技有限公司(以下简称“望繁信科技”)凭借其自主研发的“数字北极星流程挖掘分析软件”项目,成功入选2024年第3批上海市高新技术成果转化项目名单。这一殊荣根据《上海市高新技术成果转化项目认定办法》&#xff…

linux 中docker git 容器磁盘占满如何解决

1.问题描述 git之前还使用ok,突然出现访问500 错误,懵圈了 2.问题排查 1. 服务器查看,服务正常,没有异常出现。 2. 查找资料,需要查看是否磁盘已经满了果然使用df-h 后显示磁盘已经满了,且容器和本地都…

WPF篇(20)- Menu菜单+ContextMenu上下文菜单+StatusBar状态栏

Menu菜单 Menu控件继承于MenuBase,而MenuBase继承于ItemsControl。所以学习Menu之前,要先了解一下MenuBase基类。它是一个抽象类,拥有一个ItemContainerTemplateSelector模板选择器,并重写了一些关于键盘和鼠标的方法。 Menu的子…

电脑监控怎样看回放视频?一键解锁电脑监控回放,守护安全不留死角!高效员工电脑监控,回放视频随时查!

你是否曾好奇那些键盘敲击背后的秘密?电脑监控不仅是守护企业安全的隐形盾牌,更是揭秘高效与合规的魔法镜!一键解锁安企神监控回放,就像打开时间宝盒,让过去的工作瞬间跃然眼前。无论是精彩瞬间还是潜在风险&#xff0…

【Android】adb devices 出现devices offline的问题

1 问题 adb devices 出现devices offline 2 解决方法 adb kill-serveradb start-server 然后,adb devices查看。 adb devices 问题解决啦。。。💛 💙 💜 ❤️ 💚 💛 💙 💜 ❤️…

12/24/30v/36转固定5v输出芯片

设计电源芯片的应用方案时,必须保证输入电压在DC6V至30V范围内,输出电压为固定的5V,同时电流需在200至300mA之间。在这种需求下,推荐使用AH1405芯片,因其输入电压范围宽(6-40V),内置…

自闭症寄宿语言开发全托学校

在自闭症儿童的世界里,语言往往是一座难以跨越的高山。语言问题作为自闭症儿童的核心障碍之一,给他们的生活、学习和社交带来了极大的困扰。因此,语言开发对于自闭症儿童来说至关重要。那么,怎样才能更好地对自闭症儿童进行语言开…

arthas源码刨析:启动 (1)

文章目录 arthas-bootBootstrap Created with Raphal 2.3.0 开始 检查监听端口 jps 列表java应用 下载 lib 依赖 功能移交给 arthas-core 结束 arthas-boot 该module 的代码只有3个类: Bootstrap 启动类 Bootstrap ,开头的注解就是 alibaba 的 cli 中…

Qt 0820作业

一、思维导图 二、闹钟 头文件代码 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> //时间类 #include <QTimer> //时间事件类 #include <QTimerEvent> //定时器事件类 #include <QMouseEvent> //鼠标…

CSS 元素的尺寸

const dom document.querySelector(‘.size’) 以下方法只是拿的width举例 浏览器渲染管线 dom.style.width: 它读取/设置的是浏览器渲染管线的第一个步骤dom解析,也就是DOM树 比如: <a style"width:100px"></a><a style"width: auto"&…

SAP B1 三大基本表单标准功能介绍-业务伙伴主数据(三)

背景 在 SAP B1 中&#xff0c;科目表、业务伙伴主数据、物料主数据被称为三大基本表单&#xff0c;其中的标准功能是实施项目的基础。本系列文章将逐一介绍三大基本表单各个字段的含义、须填内容、功能等内容。 附上 SAP B1 10.0 的帮助文档&#xff1a;SAP Business One 10…

Android常见界面控件(二)

目录 ​前言 一、 RadioButton控件 设置RadioGroup的监听事件 二、CheckBox控件 三、Toast类 改变Toast窗口的提示位置 四、EditText控件 常用属性 前言 在上一篇中&#xff0c;我们讲解了三个常见的控件&#xff1a;TextView控件、Button控件、ImageView控件&#xf…

【ARM+Codesys 客户案例 】RK3568/A40i/STM32+CODESYS在工厂自动化中的应用:PCB板焊接机

现代化生产中&#xff0c;电子元件通常会使用自动化设备来进行生产&#xff0c;例如像PCB&#xff08;印刷电路板&#xff09;的组装。但是生产过程中也会面临一些问题&#xff0c;类似于如何解决在PCB板上牢固、精准地安装各种组件呢&#xff1f;IBL Lttechnik GmbH公司的CM80…

5.Linux_Shell编程

概述 什么是shell脚本&#xff1a; Shell脚本是利用shell的功能所写的一个程序。这个程序是使用纯文本文件&#xff08;后缀为.sh&#xff09;&#xff0c;将一些shell的语法与命令&#xff08;含外部命令&#xff09;写在里面&#xff0c;搭配正则表达式、管道命令与数据流重…

公认最强充电宝有哪些?盘点四款公认强悍级别充电宝推荐

随着智能手机和其他移动设备的广泛应用&#xff0c;充电宝已经成为我们生活中不可或缺的一部分。然而&#xff0c;市场上众多品牌和型号的充电宝也让消费者面临选择难题&#xff0c;安全隐患也随之浮现。因此&#xff0c;选择一款安全可靠、性能卓越的充电宝显得尤为重要。本文…