更新时间:2019年07月26日 14时18分55秒 来源:黑马程序员论坛
一.计算机数据存储的基础知识 1.计算机存储器的基本单位 : 计算机中最小的存储单元是bit,也叫做位,表示两种状态,可以存储1或者0,它存在于物理内存上。 计算机使用8bit的块来作为最小可寻址的存储单位,这个存储单位叫做字节(Byte)。 从程序的视角来看,内存是一个非常大的字节数组,程序的虚拟地址即为每个子节在数组中的下标。 2.什么是机器字(word)? 一般来说,机器字是cpu内部总线的宽度。平常说的32位机和64位机,指的就是计算机机器字的长度 机器字长度决定了cpu一次运算能够处理数据的最大宽度,一般也决定了cpu所能访问内存的地址范围。 例如,32位机器字长的cpu一次传输的数据能表示的范围是0~2^32-1Byte, 那么如果想传输一次地址就能访问内存的话,内存的大小就不能超过这个范围, 这个范围就是我们平常说的程序的地址空间0~4G 机器字长对程序来说意味着什么? 举例来说,当程序prog.c被编译成32位程序时,可以在32位或者64位机器上运行 (大多数64位机器也可以运行32位机器编译的程序,这是一种向后兼容。) 当它被编译成64位程序时,那就只能在64位机器上运行。 因此,当我们将程序称为“32位程序”或者“64位程序”时,区别在于该程序是如何被编译的。 3.存储数据的字节顺序(大端和小端) 考虑我们要存储一个跨越多个字节的数据,例如int型数据。 为了我们能够正确的取出这个数据,我们需要确定两条规则: 1.选取哪个字节表示这个数据的地址,以便于我们知道从哪取出数据。 2.在这个数据存储区域的内部怎么排列这些字节,以便于我们把这些字节重新还原成数据。 关于第一条规则:在几乎所有的机器上,数据的地址都为所使用字节中最小的地址。 通常说的大端小端之分,就是关于怎么实现第二条规则,例如我们要存储0x01234567: ![]() file:///C:/Users/SOLUTI~1/AppData/Local/Temp/enhtmlclip/Image.png 通俗的说法,小端就是低地址存储低位,高地址存储高位,大端正好相反。 定义比较麻烦,大家可以从图中自行体会。 注意,计算机中数据存储是大端字节序还是小端字节序,是由cpu决定的, 例如,通常intel的cpu采用的是小端字节序。 说了这么多理论,我们来写段代码验证下自己的机器是什么字节序吧: int is_little_endian(void) { /* MSB = 0, LSB = 1 */ int x = 1; /* Return MSB when big-endian, LSB when little-endian */ return (int)(*(char *)&x); } 术语:LSB = Least Significant Bit 最低有效位 MSB = Most Significant Bit 最高有效位 |
推荐了解热门学科
java培训 | Python人工智能 | Web前端培训 | PHP培训 |
区块链培训 | 影视制作培训 | C++培训 | 产品经理培训 |
UI设计培训 | 新媒体培训 | 产品经理培训 | Linux运维 |
大数据培训 | 智能机器人软件开发 |
传智播客是一家致力于培养高素质软件开发人才的科技公司,“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。
传智播客从未停止思考
传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”
中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。
何为中高级程序员课程?
传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展。“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。
黑马程序员热门视频教程
Python入门教程完整版(懂中文就能学会) | 零起点打开Java世界的大门 |
C++| 匠心之作 从0到1入门学编程 | PHP|零基础入门开发者编程核心技术 |
Web前端入门教程_Web前端html+css+JavaScript | 软件测试入门到精通 |