《深入理解计算机系统》·深入浅出·快速理解第2章(3日完稿)
Posted kikokingzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《深入理解计算机系统》·深入浅出·快速理解第2章(3日完稿)相关的知识,希望对你有一定的参考价值。
🌕写在前面
- 🍊博客主页:kikoking的江湖背景
- 🎉欢迎关注🔎点赞👍收藏⭐️留言📝
- 🌟本文由 kikokingzz 原创,CSDN首发!
- 📆首发时间:🌹2021年11月16日🌹
- 🆕最新更新时间:🎄2021年11月16日🎄
- ✉️坚持和努力一定能换来诗与远方!(向未见花闻学习)
- 📠参考书籍:📚《深入理解计算机系统》
- 🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢感谢感谢!
✨✨✨我是分割线✨✨✨
2.1信息存储
·大多数计算机采用8bit的字节作为最小的可寻址的内存单位,而不是bit。
所以我们常说的32为机器,其地址为32位,但一个地址序列只存储1字节,注意单位是字节
1.虚拟内存
·机器级程序将内存视为一个非常大的字节数组,所有可能地址的集合就称为虚拟地址空间
2.机器级层面 程序就是字节序列
·C编译器维护数据类型的信息,但是其生成的机器级程序并不包含关于数据类型的信息;每个程序对象被视为一个字节块,程序就变为一个字节序列
✨✨✨我是分割线✨✨✨
🔥2.1.1·采用十六进制数表示位模式
·因为二进制表示法太冗长
·十进制表示法与位模式的互相转化很麻烦
·掌握:进制转换
✨✨✨我是分割线✨✨✨
🔥2.1.2·字数据的大小
1.每台计算机都有一个字长(32位机器/64位机器),指明指针数据的标称大小
2.32位字长的内存(虚拟地址空间)为4GB
由此计算可得32位字长的机器内存位4GB
3.数据类型的大小
✨✨✨我是分割线✨✨✨
🔥2.1.3寻址和字节顺序
1.多字节对象的地址为所使用字节(内存单元序号)中字节最小的地址
2.字节顺序
·大端法:最高有效字节在最前面的方式
·小端法:最低有效字节在最前面的方式
·双端法:可以配置作为大端或者小端的机器运行
🔥2.1.4表示字符串
1.C语言中字符串被编码为一个以null(其值为0)字符结尾的字符数组
2.每个字符都由某个标准编码来表示,最常见的就是ASCII码
3.文本数据比二进制数据具有更强的平台独立性
·因为在使用ASCII作为字符码的任何系统上都将得到相同的结果,与字节顺序和字节大小无关(即无关大小端机器,输出结果相同)
🔥2.1.5表示代码
·即使是完全一样的进程,运行在不同的操作系统上也会有不同的编码规则;即二进制代码是不兼容的,很少能在不同机器和操作系统间进行移植。
·机器级角度看来,程序只是字节序列,是不知道关于原始源程序的任何信息的
🔥2.1.6布尔代数
·布尔通过将逻辑值 TRUE 和 FALSE 编码为二进制值1和0,设计出布尔代数
·掌握:计算
🔥2.1.7C语言中的位级运算
·C语言支持按位布尔运算
·例题1:如何不应用外部变量来交换向x、y的值
·例题2 掩码运算
举例:掩码0xFF(最低的8位为1)表示一个字的低位字节
·位级运算 x&0xFF 生成一个由x最低有效字节组成的值,而其他字节被置为0
·x=0x89ABCDEF ; x&0xFF=0x000000EF
我们应当熟练掌握位级运算,在编程时可以大大提高代码的效率
🔥2.1.8C语言中的逻辑运算
·C语言中还提供来一组逻辑运算符||、&&、! 分别对应于命题逻辑中的OR、AND、NOT运算
·逻辑运算认为所有的非零参数都表示TRUE,而参数0表示FALSE
·它们返回1或者0,分别表示TRUE和FALSE
·短路特性
·如果对第一个参数求值就能确定表达式对结果,那么逻辑运算符就不会对第二个参数求值
·超级好的例题
🔥2.1.9C语言中的移位运算
·左移
·(我觉得这段CSAPP讲的没有很难懂,就直接拷贝了)
·右移
·逻辑右移:补0(无符号数必须逻辑右移)
·算术右移:补最高位(基本上对有符号数使用算术右移)
·很好的例子
以上是关于《深入理解计算机系统》·深入浅出·快速理解第2章(3日完稿)的主要内容,如果未能解决你的问题,请参考以下文章