服饰网站 模板,建设部总监继续教育网站,重庆百度网站快速排名,网页登不了wordpressC语言#xff08;长期更新#xff09;第18讲
数据在内存中的存储 跟着潼心走#xff0c;轻松拿捏C语言#xff0c;困惑通通走#xff0c;一去不回头~欢迎开始今天的学习内容#xff0c;你的支持就是博主最大的动力。博主主页#xff1a;潼心1412o-CSDN博客 目录 C语言长期更新第18讲
数据在内存中的存储 跟着潼心走轻松拿捏C语言困惑通通走一去不回头~欢迎开始今天的学习内容你的支持就是博主最大的动力。博主主页潼心1412o-CSDN博客 目录 C语言长期更新第18讲
数据在内存中的存储
知识回顾
18.1 整数在内存中的存储
18.2 大小端字节序和字节序判断
18.2.1 什么是大小端
18.2.2 练习
18.3 浮点数在内存中的存储
18.3.1 浮点数存的过程
18.3.2 浮点数取的过程 知识回顾
上节课我们学习了内存函数今天我们来学习内存函数坐稳了我们发车gogogo出发喽 18.1 整数在内存中的存储
对于整数内存中存放的是补码
原因有三
使用补码可以将数值域和符号位统一处理
加法减法也可统一处理CPU只有加法器
补码原码之间的转换运算过程相同不需要额外的硬件电路
18.2 大小端字节序和字节序判断
18.2.1 什么是大小端
只要数据超过一个字节就有存储顺序的问题 大端存储模式 数据低字节内容保存至内存高地址高字节低地址 小端存储模式 低字节低地址高字节高地址在数字的存储上表现为倒着放 18.2.2 练习
练习一
简述大小端概念设计一小程序判断当前机器的字节序
思路以1为例大端末尾就是1小端存储就是0
怎么拿到末位呢可强制类型转换
注意不要直接强制类型转换为char
而是要先取地址再强制转换为char*类型再解引用
why因为只有解引用地址访问才是低地址的内容而强制转换为char语法没有规定不同编译器处理不同会导致结果不稳定。但是强转为char*后解引用访问的一定是低地址的内容 练习二 注意存的时候要发生截断打印的时候要提升
练习三 练习四 在完成这道题之前首先我们需要先思考一个问题
char类型的取值范围为什么是-128到127
我们经过规律总结得到一个圈 下面我们再来看这段代码 这下看懂了
练习五 unsigned char的取值范围是0~255所以说条件很成立陷入死循环 道理和前面一样unsigned int一定是大于等于0的所以条件恒成立导致死循环的产生
练习六 18.3 浮点数在内存中的存储
浮点数家族包括float double long double
浮点数取值范围在float.h中定义
我们先来看段代码 这段代码的运行结果可能会和我们设想的不大相同 怎么个事呢
我们发现浮点数和整数的存储大不相同
在国际标准IEEE电气电子工程协会754中规定
任意一个二进制浮点数可以表示为以下形式
V (-1)^S * M * 2^E
(-1)^S 表示符号位当S0V为正数当S1V为负数M 表示有效数字M是大于等于1小于2的其实就是1点几 2^E 表示指数位
IEEE 754规定
对于32位的浮点数最⾼的1位存储符号位S接着的8位存储指数E剩下的23位存储有效数字M 对于64位的浮点数最⾼的1位存储符号位S接着的11位存储指数E剩下的52位存储有效数字M
18.3.1 浮点数存的过程
IEEE 754 对有效数字M和指数E还有⼀些特别规定。 计算机内部保存M时默认这个数的第⼀位总是1因此可以被舍去只保存后⾯的小数部分。⽐如保存1.01的时候只保存01等到读取的时候再把第⼀位的1加上去。这样做的⽬的是节省1位有效数字。 指数E情况就⽐较复杂 ⾸先E为⼀个⽆符号整数unsigned int取值范围为0~255如果E为11位它的取值范围为0~2047。但是我们知道科学计数法中的E是可以出现负数的所以IEEE 754规定存⼊内存时E的真实值必须再加上⼀个中间数对于8位的E这个中间数是127对于11位的E这个中间数是1023。⽐如2^10的E是10所以保存成32位浮点数时必须保存成10127137即10001001。 18.3.2 浮点数取的过程
取的过程分为三类
1.E小数部分非全0或全1
先加127还原M的真实值再加上省去的1还原E
2.E全0
加过127还是0说明这个数非常小我们将它视作0
3.E全1
那就已经非常大的数了视作无穷具体±看S
这下这个题就解决了 好了今天的学习内容就到这里啦谢谢你的陪伴我是潼心下次再见~如果这篇文章对你有帮助的话。请务必给主播一个一键三连球球了这对主播很重要~
博主主页潼心1412o-CSDN博客