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

C语言分析数据在内存中的存储一:(整形在内存中的存储)

数据类型介绍

我们知道C语言有很多内置类型:

char     //字符数据类型  1 个字节short    //短整型        2 个字节int      //整形          4 个字节long     //长整形        4 个字节long long //更长的整形   8 个字节float    //单精度浮点数  4 个字节double  //双精度浮点数   8 个字节

 以及他们的存储空间大小。如果把他们归类:

数据归类

 有人会说为什么 char 也是整形家族的,因为字符在内存存储的是ASCLL值,ASCLL值是整形

通常来说 int  一般就是  signed int  有符号的整数,但是 char 没有规定有无符号,但是大部分都是有符号的。(整形家族还有long long 只是没在图上写出来了)

这里都只简单列举了几个,我们重点要说的是整形在内存中的存储

 整形在内存中的存储

我们知道变量是需要在内存中创造空间的,空间的大小根据类型定,所以数据在内存中到底是怎么存储的呢?

原码,反码,补码

之前我们讲过,整形在内存中存储的都是二进制的形式,分为无符号和有符号的整形类型

有符号的最左边的一位是符号位,0是整数,1是负数。无符号的没有符号位全是有效位。

类如:

 有符号的 int 整形 a 在内存中就是 00000000 00000000 00000000 00001010,因为 int 是4个字节,就是32个比特位,图片里是16进值的表现形式而已方便看(二进制变成16进值,4个比特位表示一个16进值位),我们看看负数的:

 负数 b 应该是 10000000 00000000 00000000 00001010啊,为什么是这样的,因为在内存中存储的是补码,而刚刚的是原码,在前面操作符的时候讲过,补码等于原码取反加1,原码取反就是反码(取反符号位不变)。b在内存中应该是 11111111 11111111 11111111 11110110。换成16进值刚刚好。正数的原码,反码,补码都相同。只有负数需要计算。

如果是无符号的是什么样的:

 答案是无符号的存储还是一样的,只是最左边的没有符号位了。

我们看到内存中存储的顺序好像不太一样,这是因为大小端存储模式的原因,后面会讲。

典型列子(解题思路)

有无符号的整形提升与截断:

一:输出什么?

 这里就需要整形提升,答案是:

 分析:-1的原码是 10000000 00000000 00000000 00000001   

补码是 11111111 11111111 11111111 11111111,因为是 char 形,1个字节,要截断为8个位,所以从右边开始截断为 11111111,%d 是打印有符号的,所以先整形提升,整形提升如果是有符号的,补符号位的数字,所以是1,整形提升之后为 11111111 11111111 11111111 11111111,%d打印都当有符号处理,所以负数转为原码,又是取反加1,变为-1。这就是 char a 的分析与 b 是相同的。为什么 c 不一样,因为无符号整形提升是补0的,所以 c 整形提升后是 00000000 00000000 00000000 11111111,打印一看符号位不是1,就是正数了,正数原码,补码都一样,所以是255。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 手动修改zk类型的kafka offset
  • Django 中render、redirect 和 HttpResponse的区别
  • QPushbutton checked状态下文字显示不全
  • 学懂C++(三十六):深入理解与实现C++进程间通信(IPC)
  • Controller中接收数组参数 post请求中在body中传+post请求中通过表单形式传(x-www-form-urlencoded)
  • Python接口自动化测试框架介绍
  • 使用FFmpeg更改视频播放速度的方法
  • 设计资讯 | 这款受数学方程启发的平板桌:配集成黑胶唱片机和无线充电器
  • 一篇文章带你了解网络安全就业前景,零基础入门到精通,收藏这篇就够了
  • React+Vis.js(03):vis.js设置节点形状
  • 用Scratch编程打造你的策略游戏:《保卫萝卜》入门教程
  • Groovy DSL从入门到项目实战(一)
  • 有性价比高的开放式耳机推荐吗?盘点开放式蓝牙耳机排行榜前十名
  • 【百度】25届秋招内推码
  • vscode中使用官方推荐的编程字体Cascadia Code字体
  • JavaScript-如何实现克隆(clone)函数
  • (三)从jvm层面了解线程的启动和停止
  • 【知识碎片】第三方登录弹窗效果
  • Git的一些常用操作
  • HTML-表单
  • JS实现简单的MVC模式开发小游戏
  • pdf文件如何在线转换为jpg图片
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • spring boot 整合mybatis 无法输出sql的问题
  • 第十八天-企业应用架构模式-基本模式
  • 缓存与缓冲
  • 基于遗传算法的优化问题求解
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 那些被忽略的 JavaScript 数组方法细节
  • 前言-如何学习区块链
  • 山寨一个 Promise
  • 深入浅出webpack学习(1)--核心概念
  • 微服务框架lagom
  • 问题之ssh中Host key verification failed的解决
  • 交换综合实验一
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​VRRP 虚拟路由冗余协议(华为)
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #WEB前端(HTML属性)
  • #传输# #传输数据判断#
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (52)只出现一次的数字III
  • (二)WCF的Binding模型
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net 6.0 处理跨域的方式
  • .net core docker部署教程和细节问题
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net Web项目创建比较不错的参考文章
  • @RestController注解的使用
  • [<MySQL优化总结>]
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Angularjs]ng-select和ng-options
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存