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

网站版面做好北京装修公司怎么选

网站版面做好,北京装修公司怎么选,烟台建网站公司价格,2021互联网公司100强目录 1、整数在内存中的存储 (1)大小端 (2)数据存储读取练习 2、浮点数在内存中的存储 Hello大家好,很高兴我们又见面啦!给生活添点Passion,开始今天的编程之路! 1、整数在内存中的存储 之…

        

目录

1、整数在内存中的存储

(1)大小端

(2)数据存储读取练习

2、浮点数在内存中的存储


       Hello大家好,很高兴我们又见面啦!给生活添点Passion,开始今天的编程之路!

1、整数在内存中的存储

        之前我们讲过二进制数的原码、反码和补码。对于整型来说,数据存放内存中其实存放的是二进制补码。


(1)大小端

        首先我们来介绍一下什么是大小端:

        在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序。

什么意思呢?我们现在定义一个变量,看看她是如何储存在内存中的:

        我们可以看到,从左往右依次是44 33 22 11,这和我们定义的11 22 33 44恰好相反,数据的高字节内容保存在高地址处说明在这里我们vs2022是小端存储模式。

        那么在读取这个数据的时候,就应该由高地址到低地址这样读取。

现在设计一个程序来判断当前机器的字节序(大端还是小端)

#include "stdio.h"
int check()
{int i = 1;return (*(char*)&i);
}
int main()
{int ret = check();if (ret == 1){printf("小端\n");}elseprintf("大端\n");return 0;
}

现在我们来分析一下这个程序是怎么运行的。

        我们取出了i的内存,在函数中,我们取出了他的地址,并强制转化成了char型解引用。我们都知道int型数据占四个字节,char型占一个字节,那我们强制转化之后读取只读取了一个字节,也就是01(先读低地址)。倘若我们读出来是00,不就说明他是00 00 00 01这样的大端储存模式吗?

输出结果:


(2)数据存储读取练习

下面我们来看这道题:

#include "stdio.h"
int main()
{char a = -1;signed char b = -1;unsigned char c = -1;//无符号字符型printf("%d %d %d", a, b, c);return 0;
}

        a,b的输出结果没有什么异议,就是正常的读取,但是第三个就离谱起来了,结果居然是255!

别害怕,我们一点点来分析。

        首先,我们把-1的补码存入内存中:

11111111 11111111 11111111 11111111 

char取一个字节:11111111

        因为是无符号整型,高位全都补0:00000000 00000000 00000000 11111111

        正数的原码,反码,补码都相同,直接转十进制,打印结果为255。


再看下面这道题:

#include "stdio.h"
int main()
{char a = -128;printf("%u",a);return 0;
}

运行结果:

        结果很抽象,但是不要害怕,我们一点点来分析:

        首先还是把-128补码存入内存中:

11111111 11111111 11111111 10000000

        然后,%u是打印无符号整型的意思,打印的时候要先强制转化为无符号整型,然后取一个字节:

10000000

        接着用符号位补全:

11111111 11111111 11111111 10000000

        现在系统认为这个数是无符号整数,那么他的原码反码补码都是相同的,所以直接换成十进制打印:

        这里我们用计算器算出结果。


总结一下容易出错或不容易弄懂的点:

        1、如果一个数是无符号整型,那么补全的时候应该用0补全;如果不是无符号整型,则应该用符号位补全。

        2、因为我们是以%d的形式打印,所以我们去一个字节后应该补全,补成四个字节。


2、浮点数在内存中的存储

        不知道大家在写代码的时候有没有遇到这种问题:在强制转化整型或者不知道怎么着,浮点数以%f的输出结果为0.000000!这就很莫名其妙。

        其实原因就在于,在代码编写的时候有意或无意的将整型转化为了浮点型,由于浮点型与整型的读取规则不同,导致出错。

这里我们简单了解一下浮点数是如何进行储存的。

        根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

        (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。

        M表示有效数字,大于等于1,小于2。

        2^E表示指数位。

放在内存中(这里以32位为例):

        最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M

        在六十四位中,E存储位数为11位,剩下的52位存储M。

        既然存储和读取规则不同,相信大家很容易就明白为什么强制转化之后结果会不正确了!

        今天的内容就分享到这,感兴趣的朋友可以点点关注,三连支持一下,我会持续更新C/C++/算法知识分享,期待我们的下次见面!

http://www.yayakq.cn/news/635390/

相关文章:

  • wordpress网站好优化吗设置网关
  • 实验室网站建设重要性网上简历模板
  • 网站建设基本流程信息技术毕业设计做网站怎么答辩
  • 做网站的中标公司济南营销网站建设公司
  • 湖南手机网站制作公司wordpress怎么让网页支持多国语言
  • 帮别人做网站如何备案品牌建设传播网站公司
  • 网站建设属于什么职位类别网站主机租用多少钱
  • 湛江网站建设产品优化去哪里弄Wordpress
  • 微友说是做网站维护让帮忙投注查询网站备案密码是什么样的
  • 空间网站建设百度q3财报减亏170亿
  • 文化网站策划山东诚祥建设集团公司网站
  • 网站架构设计英文翻译android移动网站开发详解
  • 网站开发加盟新乡建设网站公司
  • 怎么做让自己的网站怎么看网站的建站公司是哪个
  • 上海网站开发方案深圳前十网站扩广公司
  • 上传的网站打不开杭州python做网站
  • 自己做APP需要网站吗中企动力口碑怎么样
  • win8风格网站模板百度学术官网论文查重免费
  • 服务器网站建设教程视频教程wordpress 4.7.9漏洞
  • 在线做效果图的网站有哪些app开发公司有什么部门
  • 烟台网站制作公司WordPress js木马
  • 合肥网站seo报价网站建设app开发 微信小程序 网站开发 自动脚本
  • 建设银行的网站怎么打开小程序开发教程 pdf
  • 百度站长号购买东莞市官网网站建设企业
  • 义乌网站建设多少钱aso优化的主要内容为
  • 东莞企业自助建站系统大连响应式网站
  • 支付网站建设专门做外链的网站
  • 建设机械网站案例分析家装公司需要装修资质吗
  • 网站计数代码郑州网站建设e橙网
  • 余姚专业做网站公司厦门关键词seo排名网站