《2.1.4 C语言中的整数类型及类型转换|精讲篇》

后面作者会在2025.5.25 00:00前整理出笔记和思维导图大家放心,主页还有其他文章 请先移步欢迎参考 收藏文章 关注博主 高效学习
好了,这小节我们要探讨一个相对来说简单的问题,就是C语言里边的那些定点整数是如何进行强制类型转换的。好来看这样的一个例子,首先需要跟大家声明的是C语言当中的定点整数。
大家熟悉的什么int?啊,还有什么short还有long这些定点整数都是用补码的形式来存储的。另外C语言里还有一个关键字叫unsigned,如果用unsigned来修饰short或者int或者long。
那就意味着这个定点整数它是一个无符号数。好来看一下,现在有一个short型的短整数x,它的值是负的四三二一,那么由于是采用补码表示的。
并且短整形是占两个字节,也就是。16个比特,所以16个比特的补码表示负四三二一应该是这样的一个值,这个大家可以自己转换一下。
源码补码如何转换?这个我们之前已经强调过,不熟悉的同学可以再自己动手试一下好,现在我们。把x这个呃短整形的数。
把它强制转换成unsigned short,也就是无符号的短整形。y那这种强制转换的规则是会把x的这个补码形式的数。完整不变的复制给y这个变量,那由于y也是占两个字节。
所以y的机器代码其实和x是一模一样的。只不过由于y是一个无符号的短整形,因此计算机在解析y的真值的时候,会按照无符号整数来进行解析。所以这个二进制无符号数。
把转换成真值,应该是对应这样的一个值,同样的,大家可以暂停来转换一下,看看是不是这样?
好,那这是一个有符号的定点整数转换成长度相同的无符号定点整数的一个规则。不改变数据的二进制内容,但是会改变它的解释方式。好。
再看第二个例子,如果我们把一个更长的数据把它变成一个更短的数据啊,这儿我们定义了两个int型的变量a和b。那大多数情况下C语言里边int型的数据占四个字节。那现在a和b是两个有符号的数都用补码的形式来保存。
当我们把a和b这两个数强制转换成short,也就是由四个字节变成两个字节的时候。计算机的做法是会直接把高位截断,然后只保留低位,那a对应的16进制应该是这样的。
把这四个字节的内容截断,只保留最低两个字节的内容,也就是八六a一那更低的两个字节,就是c这个变量的值。那由于c是一个有符号的短整形。
所以计算机会用补码的规则来对它进行解析,与之对应的真值就应该是这样的一个值。这是一个16比特,16位的布吗?那对于b和d也是一样的b这个数呃。
它用补码表示应该是这样的,把b转换成只有两个字节的d呃short类型,那么就是只保留。更低的两个字节,七七五幺。
那同样的,由于d它是一个有符号的短整形,所以计算机会用16比特补码的这种方式来对它进行解析,与之对应的真值是这样的一个值。好。
那这是更长的数据转换成更短的数据的一个处理方式,很残暴,就是直接截断,只保留更低的字节。好。
最后再来看更短的数据,转换成更长的数据,那这个问题其实我们之前聊过,也就是所谓符号扩展的问题。好x原本是一个两个字节的补码呃。
总共占16位,那么把short型的x转换成四字节的int型。计算机做的事情就是符号扩展,那之前我们说过,对于一个定点整数的补码来说。
如果它是一个负数。那么,我们需要在高位呃,也就是这个符号位和原有的数值位之间添一用,这样的方式扩展得到的补码。
你把它解析为真值的话,这个真值是不会变的。只不过是补码的整体长度拓展了而已,好再来看n这个变量呃,我们把x强制的转换为无符号类型。
然后把它复制给无符号的短整型n。那之前我们说过,这种强制转换会把二进制代码原封不动的复制给n,只不过计算机会以无符号数的规则来解析这一串机器数。那这是n所对应的一个真值好。
最后把无符号数n变成四个字节的无符号数p。那由于是无符号数到无符号数的转变,因此直接在高位添零就可以。p和n的真值,这个真值是保持不变的。
好,那这就是C语言里边定点整数相关的一些强制类型转换第一个部分,探讨的是在转换的两种数据长度相同的情况下呃,无符号数和有符号数之间的一种转换规则。第二个部分探讨的是从长数据强转成短数据的一个处理方式。
而第三个部分探讨的是从短数据转为长数据的一个转变方式。

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

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

相关文章

采用多维计算策略(分子动力学模拟+机器学习),显著提升 α-半乳糖苷酶热稳定性

字数 978,阅读大约需 5 分钟 在工业应用领域,α-半乳糖苷酶在食品加工、动物营养及医疗等方面发挥着重要作用。然而,微生物来源的该酶往往存在热稳定性不足的问题,限制了其在工业场景中的高效应用。近日,来自江南大学的…

Jetpack Compose预览调试技巧

Jetpack Compose 预览(Preview)不显示是一个常见问题,可能由多种原因导致。以下是系统的调试技巧和解决方案: 1. 检查基础配置 Compose 版本兼容性 确保 compose-compiler、compose-ui 等依赖版本一致且与 Kotlin 版本兼容。检查 build.gradle: android {compileOptions {…

使用 Go 语言实现完整且轻量级高性能的 MQTT Broker

MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议。但是目前虽然mqtt的客户端很多,但是服务端着实不多,常见的服务端如mosquitto或emqx。但是golang语言的实现几乎找不到。golang的轻量级部署和高并…

uv sync --frozen卡住不动

今天受邀帮同事调试uv卡住不动的问题,同样的代码已经在别的服务器跑起来了,换了一台服务器之后,执行uv sync --frozen没有按预期创建虚拟环境和安装依赖。 1. 镜像源是已经配置好的,pip install也能很快安装包。 2. 查看了uv.lo…

Spring Boot中如何对密码等敏感信息进行脱敏处理

以下是常见的脱敏方法及实现步骤&#xff0c;涵盖配置、日志和API响应等多个层面&#xff1a; ​1. 配置文件敏感信息脱敏​ (1) 使用加密库&#xff08;如Jasypt&#xff09; ​步骤​&#xff1a; 添加依赖&#xff1a; <dependency><groupId>com.github.ulise…

springboot中redis的事务的研究

redis的事务类似于队列操作&#xff0c;执行过程分为三步&#xff1a; 开启事务入队操作执行事务 使用到的几个命令如下&#xff1a; 命令说明multi开启一个事务exec事务提交discard事务回滚watch监听key(s)&#xff1a;当监听一个key(s)时&#xff0c;如果在本次事务提交之…

python打卡day35@浙大疏锦行

知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 作业&#xff1a;调整模型定义时的超参数&#xff0c;对比下效果。…

Python爬虫实战:研究Crawley 框架相关技术

1. Crawley 框架相关定义 1.1 网络爬虫定义 网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。它通过 HTTP 协议与 Web 服务器进行交互,获取网页内容并进行解析处理,是数据采集和信息检索的重要工具。 1.2 Crawley 框架定义 Crawley 是一个基于 Pytho…

tvalid寄存器的理解

if(!out_axis_tvalid_reg || m_axis_tready ) beginend m_axis_tready 是上拍下一级给的ready信号 out_axis_tvalid_reg是上一拍&#xff0c;本级给下级的valid信号 一共有四种组合&#xff0c;然后可以通过这个if语句&#xff0c;在接下来的begin ... end中&#xff0c;用来…

【AI实战】从“苦AI”到“爽AI”:Magentic-UI 把“人类-多智能体协作”玩明白了!

Hello&#xff0c;亲爱的小伙伴们&#xff01;你是否曾经在深夜里&#xff0c;为了自动化点外卖、筛机票、抓网页数据焦头烂额&#xff1f;有没有幻想过哪天能出个“贴心AI管家”&#xff0c;一键点菜、搞定事务、自动操作网页&#xff0c;比你还懂你&#xff1f;更关键——还让…

【东枫科技】usrp rfnoc 开发环境搭建

作者 太原市东枫电子科技有限公司 &#xff0c;代理销售 USRP&#xff0c;Nvidia&#xff0c;等产品与技术支持&#xff0c;培训服务。 环境 Ubuntu 20.04 依赖包 sudo apt-get updatesudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils …

Ntfs!ReadIndexBuffer函数分析之根目录读取索引缓冲区的一个例子

Ntfs!ReadIndexBuffer函数分析之根目录读取索引缓冲区的一个例子 第一部分&#xff1a; 0: kd> p Ntfs!ReadIndexBuffer0xdc: f7173962 e829f60300 call Ntfs!NtfsCheckIndexBuffer (f71b2f90) 0: kd> t Ntfs!NtfsCheckIndexBuffer: f71b2f90 55 p…

LumaDot (亮度可调的屏幕圆点)

应用名称 LumaDot &#xff08;源自 “Luminance”&#xff08;亮度&#xff09; “Dot”&#xff08;圆点&#xff09;&#xff0c;强调其核心功能&#xff1a;亮度可调的屏幕圆点&#xff09; 应用说明 LumaDot 是一款轻量级 Windows 桌面工具&#xff0c;专为需要屏幕标记…

HarmonyOS 鸿蒙应用开发基础:EventHub,优雅解决跨组件通信难题

EventHub是鸿蒙开发中用于线程内通信的事件中心模块&#xff0c;基于发布订阅模式实现组件间的高效通信。它完美解决了传统回调方式在多层嵌套场景下的痛点&#xff0c;使得组件间的通信更加灵活和易于管理。 核心特性 事件中心机制&#xff1a;通过事件名进行通信&#xff0c…

前端框架token相关bug,前后端本地联调

今天我搭建框架的时候&#xff0c;我想请求我自己的本地&#xff01;然后我自己想链接我自己的本地后端&#xff0c;我之前用的前端项目&#xff0c;都是链别人的后端&#xff0c;基本上很少情况会链接自己的后端&#xff01;所以我当时想的是&#xff0c;我前后端接口一样&…

【数据结构初阶】顺序表专题

文章目录 顺序表1.数据结构相关概念1、什么是数据结构2、为什么需要数据结构&#xff1f; 2.顺序表1、顺序表的概念及结构2、顺序表分类3、动态顺序表的实现1.定义一个动态顺序表2.顺序表的初始化3.顺序表的销毁4.顺序表达的尾插5.顺序表的头插6.空间大小检查函数7.顺序表的尾删…

从神经生物学到社会心理学:游戏沉迷机制的深度解构

你是否曾在深夜放下手机时惊觉&#xff1a;"明明只想玩10分钟&#xff0c;怎么天都亮了&#xff1f;"这不是意志力薄弱的表现&#xff0c;而是价值数十亿美元的游戏产业用神经科学精心设计的认知陷阱。 当《王者荣耀》的Victory音效让你心跳加速&#xff0c;当《原神…

15.集合框架的学习

一、简介 集合框架&#xff08;Collection Framework&#xff09; 是 Java 提供的一套用于存储、操作和处理数据集合的标准化架构。它主要位于 java.util 包中&#xff0c;提供了一组 接口 和 实现类&#xff0c;用于操作不同类型的数据集合&#xff0c;如列表&#xff08;List…

【方案分享】展厅智能讲解:基于BLE蓝牙Beacon的自动讲解触发技术实现

【方案分享】展厅智能讲解&#xff1a;基于BLE蓝牙Beacon的自动讲解触发技术实现 让观众靠近展品即可自动弹出讲解页面&#xff0c;是智能展厅的核心功能之一。本文将从软硬件技术、BLE Beacon原理、微信小程序实现、优劣对比与拓展方案五个维度&#xff0c;系统讲解“靠近展台…

微前端架构:从单体到模块化的前端新革命

在信息技术&#xff08;IT&#xff09;的迅猛发展中&#xff0c;前端开发领域正迎来一场颠覆性的变革 —— 微前端架构&#xff08;Micro - Frontends&#xff09;。2025 年&#xff0c;随着 Web 应用的复杂性激增、团队协作需求的增长以及用户对无缝体验的期待&#xff0c;微前…