CSAPP 2020-12-06
此文章的 撰写时间 可能有误
这周比较烦, 详见随笔
CSAPP Today:
主要是一些oier们几乎人均知道的进制内容, 还有一些关于信息储存方式
- 十六进制的表示方法, 与二进制的转换
0x173A4C
转换成二进制, 每位的二进制组合起来
1 | 7 | 3 | A | 4 | C |
---|---|---|---|---|---|
0001 | 0111 | 0011 | 1010 | 0100 | 1100 |
则0x173A4C
的二进制为000101110011101001001100
相反地, 二进制转换为十六进制, 只需要分为四位一组推回十进制
用十六进制表示;
特别地, 对于不是4的倍数总数的二进制, 允许最左面的四位不为四位
字数据大小 也叫字长, 表示虚拟地址空间的访问范围在\([0,2^{w}-1]\)范围内
常见的有64位和32位, 不同字长中对于语言的实现的数据类型大小不同寻址, 大端法和小端法 一个十六进制数据的值为
0x01234567
, 以下是大端法和小端法的表示 (假设开始寻址的地址为0x100)
- 大端法
0x100 | 0x101 | 0x102 | 0x103 |
---|---|---|---|
01 | 23 | 45 | 67 |
- 小端法
0x100 | 0x101 | 0x102 | 0x103 |
---|---|---|---|
67 | 45 | 23 | 01 |
可见符合人脑的方式是大端法, 但除了个别古老和特殊用处机器外, 一般实现(Intel)都是小端法
0x01234567
中0x01
才是高位进制,
0x67
是低位
- 表示字符串 这个oier耳熟能详, ASCII嘛, 不再赘述
主义由于大小端表示方法不同, 所以十六进制数据不一定是跨平台的, 但ASCII一定是
回来说说布尔代数和瞎写的日记
布尔代数
最简单布尔代数是建立在一个最简单的集合\({0,1}\)上的
类似地, &
, |
,
与C++中的使用方式一样.
- 位向量
对于长度固定为 \(w\) ,由0和1构成的串称为位向量,
位向量的运算就是每一位的对应运算, 如\(a=[01]\)和\(b=[11]\), \(a&b\)就是\([0&1,1&1]=[0,1]\)
位向量的一个好的用途是表示集合,
这个紫书在说子集的时候(暴力枚举那一章)说过
如果第n位为, 那么表示没有这个数,
为1则有(**注意这里是把最后一位放到最前面)
&
|
^
则分别对应交集
并集和补集, 这个很好理解 可以自行思考一下
欸 还有一些布尔代数的运算规律 然而我还没搞清楚原理 暂时就不发了