CSAPP 2020-12-06

此文章的 撰写时间 可能有误

这周比较烦, 详见随笔

CSAPP Today:

主要是一些oier们几乎人均知道的进制内容, 还有一些关于信息储存方式

  1. 十六进制的表示方法, 与二进制的转换 0x173A4C转换成二进制, 每位的二进制组合起来
1 7 3 A 4 C
0001 0111 0011 1010 0100 1100

0x173A4C的二进制为000101110011101001001100
相反地, 二进制转换为十六进制, 只需要分为四位一组推回十进制 用十六进制表示;
特别地, 对于不是4的倍数总数的二进制, 允许最左面的四位不为四位

  1. 字数据大小 也叫字长, 表示虚拟地址空间的访问范围在\([0,2^{w}-1]\)范围内
    常见的有64位和32位, 不同字长中对于语言的实现的数据类型大小不同

  2. 寻址, 大端法和小端法 一个十六进制数据的值为0x01234567, 以下是大端法和小端法的表示 (假设开始寻址的地址为0x100)

  • 大端法
0x100 0x101 0x102 0x103
01 23 45 67
  • 小端法
0x100 0x101 0x102 0x103
67 45 23 01

可见符合人脑的方式是大端法, 但除了个别古老和特殊用处机器外, 一般实现(Intel)都是小端法

0x012345670x01才是高位进制, 0x67是低位

  1. 表示字符串 这个oier耳熟能详, ASCII嘛, 不再赘述
    主义由于大小端表示方法不同, 所以十六进制数据不一定是跨平台的, 但ASCII一定是

回来说说布尔代数和瞎写的日记

布尔代数

最简单布尔代数是建立在一个最简单的集合\({0,1}\)上的

类似地, &, |, 与C++中的使用方式一样.

  • 位向量

对于长度固定\(w\) ,由0和1构成的串称为位向量,
位向量的运算就是每一位的对应运算, 如\(a=[01]\)\(b=[11]\), \(a&b\)就是\([0&1,1&1]=[0,1]\)

位向量的一个好的用途是表示集合, 这个紫书在说子集的时候(暴力枚举那一章)说过
如果第n位为, 那么表示没有这个数, 为1则有(**注意这里是把最后一位放到最前面)
& | ^则分别对应交集 并集和补集, 这个很好理解 可以自行思考一下

欸 还有一些布尔代数的运算规律 然而我还没搞清楚原理 暂时就不发了