当前位置: 首页 > news >正文

《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语言里边定点整数相关的一些强制类型转换第一个部分,探讨的是在转换的两种数据长度相同的情况下呃,无符号数和有符号数之间的一种转换规则。第二个部分探讨的是从长数据强转成短数据的一个处理方式。
而第三个部分探讨的是从短数据转为长数据的一个转变方式。

相关文章:

  • 持续集成和部署
  • CodeBuddy 实现图片转素描手绘工具
  • LINUX 524 rsync+inotify 调试(问题1:指定端口无法同步/已通过;问题2:rsync.log文件中时间不显示/已显示)
  • 从 0 到 1!Java 并发编程基础全解析,零基础入门必看!
  • Git研究
  • 【音频】drc 限幅器、多带限幅器、压缩器、多带压缩器
  • 智能合约:开启数字经济新时代的“魔法契约”
  • AI Agent开发第74课-解构AI伪需求的魔幻现实主义
  • C语言创意编程:用趣味实例玩转基础语法(1)
  • 爬虫实战之爬微博图片:xpath的具体运用
  • 全球化 2.0 | 云轴科技ZStack助力中东智慧城市高性能智能安防云平台
  • AI 笔记 - 模型优化 - 注意力机制在目标检测上的使用
  • SDL2常用函数:SDL_Texture 数据结构及使用介绍
  • CodeBuddy实现pdf批量加密
  • 1、初识YOLO:目标检测的闪电战
  • 神经算子项目实战:数据分析、可视化与实现全过程
  • Spring框架--IOC技术
  • vc++在Windows中查找扬声器输出的当前音量级别
  • 理解 Redis 事务-20 (MULTI、EXEC、DISCARD)
  • C++ 反向迭代器(Reverse Iterator)实现详解
  • 去哪里做网站比较好/高端网站建设的公司
  • 做宽屏网站/湖南seo优化排名
  • 电子商务网站建设试卷及答案/网站建设制作流程
  • 西昌市建设工程管理局网站/电商营销的策略与方法
  • css中网站链接怎么做/最新国际足球世界排名
  • python手机版/衡水网站优化推广