浅读《深入理解计算机系统》——第2章信息的表示和处理(2.1)

2.1信息存储

  • 大多数计算机使用 8 位的块,或者字节(byte), 为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组称为虚拟内存。内存的每个字节对应着一个单独的地址, 所有可能地址的集合就称为虚拟地址空间。

2.1.1十六进制表示法

  • 通常采用十六进制数来表示位模式。

2.1.2字数据大小

  • 虚拟地址空间:内存视为的字节空间。若一个机器字节为ω,则对应的虚拟地址范围为:0~2^ω-1,程序最多访问2^ω个字节。
  • 位编译,采取向后兼容,即大多数64位机器可以运行为32位机器编译的程序。
  • 对于XX位程序,区别的条件是其运行的机器类型,而不是该程序具体是如何编译的。

2.1.3寻址和字节顺序

  • 对于字0X01234567而言,高位字节(最高有效字节)的十六进制值为0X01,低位字节(最低有效字节)的十六进制值为0X67。
  • 小端法机器:Linux 32、Windows和Linux 64
  • 大端法机器:Sun
  • Linux32、Windows、Sun的机器使用4字节地址,而Linux64使用8字节地址。
  • 强制类型转换不会转换真实的指针,它们只是告诉编译器以新的数据类型来看待被指向的数据。

大小端存储的常见问题

  1. 当在不同类型的机器之间通过网络传送二进制数据时,当接收程序时会发现,字里的字节变成了反序,对于这类问题的避免,规定网络应用程序的代码必须按照建立好的字节顺序。
  2. 当阅读表示整数数据的字节序列时字节顺序也很重要。

2.1.4表示字符串

  • 由于文本数据只有ASCII字符组成,因此文本数据比二进制数据具有更强的平台独立性。

2.1.5表示代码

  • 对于不同的机器类型,其指令和编码方式也不同,因此二进制代码是不兼容的。二进制代码很少在不同的机器和操作系统之间移植。

2.1.6布尔代数简介

  • 非(NOT) 与(AND) 或(OR) 异或(XOR)
  • 位向量就是固定长度为ω,由0和1组成的串。

2.1.7C语言中的位级运算

  • 按位布尔运算,|就是OR(或),&就是AND(与),~就是NOT(非),^就是XOR(异或)

2.1.8C语言中的逻辑运算

  • 对于命题逻辑有||(OR)、&&(AND)、!(NOT),逻辑运算的返回值只有0X00和0X01两种

按位运算和逻辑运算的区别:

  1. 只有参数被限制为0和1时,按位运算才和逻辑运算一致。
  2. 如果对第一个参数求值就可以确定表达式的结果,则逻辑运算就不会对第二个参数求值。 

2.1.9C语言中的移位运算

  • 左移:逻辑左移和算术左移实现的功能一致,都为补0。
  • 右移:逻辑右移~~~补0;算术右移~~~将最高有效位补充上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值