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

news2024/11/29 12:55:12

文章目录

  • 一、整形提升
  • 二、为什么要整形提升?
  • 三、截断
  • 四、示例
    • 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;		// 1
	char c2 = 127;		// 2
	char c3 = c1 + c2;  // 3
	printf("%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.coloradmin.cn/o/2059922.html

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

相关文章

【pip镜像设置】pip使用清华镜像源安装

文章目录 问题:问题描述原因分析:PyPI(Python Package Index) PypI 镜像列表解决方案: 问题: 大家经常会使用 pip 进行python 的第三方库安装,但是,有时会出现 ERROR: Could not f…

【小程序开发】答案之书——引子

《答案之书》小程序开发之旅 项目灵感&概述 在生活中,我们时常会面临各种选择和困惑:今天的工作会顺利吗?这次旅行会给我带来惊喜吗? 《答案之书》便是在这样一种灵感下诞生的。 它是一款带有神秘色彩的小程序,旨…

【JavaEE初阶】TCP/IP之应用层

📕 应用层 🎄 外卖软件 考虑一个场景,开发一款外卖软件,通过你的定位信息响应相应的商家列表。 🚩 基于行文本的方式传输 🚩 基于xml的方式传输 🚩 基于json的方式传输 这是当前最流行&#x…

网络工程师学习笔记(三)

第二章__数据通信基础 网络通信基本单位:二进制 一个比特位可以用0或1来表示 Byte(字节) bit(比特) 1Byte8bit Byte(字节用于计算存储容量的一种计量单位)一般来说网络中1Kb1000b 存储容量1…

AMD推出全新AI工具:Amuse 2.0,可通过Stable Diffusion XL生成图像

AMD最近推出了Amuse 2.0,一款创新的AI图像生成工具,旨在简化PC用户创建高质量自定义图像的过程。Amuse 2.0的核心优势在于其用户友好的界面和根据文本描述或现有图像生成新图像的能力。用户还可以从草图开始创建图像,或应用个性化的AI滤镜来改…

avalonia学习之按钮

Button 按钮是一个对指针动作做出反应的控件(并且有一些键盘等效物)。当指针向下时,它以按下状态的形式呈现视觉反馈。 指向指针释放序列的指针被解释为点击;并且这种行为是可配置的。 在确定用户是否按下按钮时,始终…

linux PXE批量网络装机及Kickstart无人值守安装

目录 一、PXE基本概述 1.1 什么是PXE 1.2 PXE批量部署的优点 1.3 PXE部署的前置条件 二、部署PXE远程安装服务器 2.1 安装并启动TFTP服务 2.2 安装并启动DHCP服务 2.3 准备linux内核、初始化镜像文件 2.4 准备PXE引导程序 2.5 安装FTP服务,准备CentOS 7 安…

Cornerstone渲染CT+PET融合影像及相关应用场景

⛳️ 引言 在我们日常开发中,可能需要在一个 Viewport 中显示多个 Volume,即既要显示一个 CT 片也要显示一个 PET 片,同时可能还要能够调整融合效果中某个 Volume 的透明度、优先显示某个 Volume 、既能修改 CT 的窗宽窗距又要能够修改 PET …

SAP STMS 每次传输的时候 目标客户断都要输入以下 做个增强 直接带出当前的

在对应200屏幕的 事件中 加入如下 FIELD-SYMBOLS <FS> TYPE any.assign ((SAPLTMSU)WTMSU-CLIENT) to <FS>.if <FS> is ASSIGNED.<FS> sy-mandt.endif. 每次stms 传输的时候默认你登录的client 写于20240821 台州 又偷懒了

【NI国产替代】PXIe‑4330国产替代24位,8通道PXI应变/桥输入模块

25 kS/s&#xff0c;24位&#xff0c;8通道PXI应变/桥输入模块 PXIe‑4330是一款同步输入模块&#xff0c;为基于桥接的传感器提供集成数据采集和信号调理。 PXIe‑4330具有更高的准确性、高数据吞吐量和同步特性&#xff0c;使其成为高密度测量系统的理想选择。\n\n为了消除噪…

如何用一种SQL注入姿势在src斩获30w+赏金?

参考:如何用一种SQL注入姿势在src斩获30w赏金&#xff1f; 前言 团队师傅在国内外SRC的clickhouse的sql注入挖掘中&#xff0c;累计金额已超30w&#xff0c;秉持一个技术forfree的思想&#xff0c;还是抽时间整理了一些技术点&#xff0c;希望能够对各位师傅带来一些帮助。 …

[ETL趋势」DB表输出支持事务、循环容器次数无限制、实时数据同步目的地StarRocks和Doris支持DDL等

FineDataLink作为一款市场上的顶尖ETL工具&#xff0c;集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具&#xff0c;进行了新的维护迭代。本文把FDL4.1.10最新功能作了介绍&#xff0c;方便大家对比&#xff1a;&#xff08;产品更新详情&#xff1a…

Elasticsearch核心

一、几个核心概念 1、节点&#xff1a;一个节点&#xff08;Node&#xff09;就是一个es进程&#xff0c;一个服务器可以部署多个节点 查询节点以及节点信息&#xff1a; http://127.0.0.1:9200/_cat/nodes?v 2、角色&#xff0c;是指节点在集群中担任什么角色&#xff1a…

安全设计最容易忽略的5大要点?(附注意事项)

在详细设计阶段&#xff0c;忽略安全设计要点会埋下安全隐患&#xff0c;增加项目遭受攻击的风险。而重视并妥善处理这些要点&#xff0c;如严格权限管理、数据加密、输入验证等&#xff0c;能够显著提升系统的防御能力&#xff0c;保护用户数据免受泄露或篡改&#xff0c;这对…

webpark 如何将本地访问地址http://localshot:3000修改为自己需要的访问地址https://www.example.com:3000

后端限制了只能【https://*.example.com】能访问&#xff0c;前端启动本地服务是【http://localhost:3000】【http://127.0.0.1:3000】,访问不到后端接口。 需要在启动浏览器访问的时候&#xff0c;单独配置地址栏访问参数。 项目使用的是webpark加载浏览器。 中文文档&#…

怎么自动备份电脑中的文件?电脑上的数据怎么才能实现自动实时备份?分享三个简单可靠的方法!

数据奇遇记——自动备份的魔法之旅&#xff01; 在数字的奇幻大陆里&#xff0c;你的文件是勇敢的小精灵&#xff0c;穿梭在无尽的字节森林中。而自动备份&#xff0c;就是那神奇的时光机&#xff0c;悄悄地为小精灵们铺设了回家的秘密通道。不论是Windows的魔法斗篷、安企神的…

小伙严重车祸左足几乎离断,衢州骨伤科医院急诊再植手术为他保命、保肢、保功能

32岁的陈先生被困在扭曲变形的车厢中。双下肢的剧烈疼痛和左踝的撕裂感让他几乎陷入昏迷。 这是一场发生在衢州的严重车祸&#xff0c;附近的居民都有所目睹。当时消防员迅速赶到现场&#xff0c;将陈先生从破碎的车内救出&#xff0c;并紧急送往当地县医院。县医院的医护人员…

React 学习——useCallback

传递函数&#xff0c;父组件重新渲染的时候&#xff0c;并不会让子组件跟着重新渲染&#xff1b; import { memo, useCallback, useState } from react;const Son memo(function Input({onChange}){console.log(子组件渲染);return (<div><div onClick{()>onCha…

Ubuntu技巧-Ubuntu远程访问之电信公网IP

&#x1f4a1; 大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、互联网和自媒体。 前面文章介绍了家庭服务器接入外网的三种方式的第一种&#xff0c;今天介绍第二种&#xff0c;即通过获得电脑公网IP&#xff0c;然后再设置动态…

前端调用后端,出现跨域报错怎么办

我前端是vue&#xff0c;后端是其他同事写的python&#xff0c;因为部署在不同的机器上&#xff0c;我前端如果直接调用他的python&#xff0c;axios请求就会出现跨域报错&#xff0c;如下 blocked by CORS policy 云云 怎么办呢&#xff0c;网上探索了一下午&#xff0c;才找…