数据(DATA)
关于进制
计算机是用来计算的,因此不能忽视 "计算的内容",即计算机处理的数据。我们知道计算机使用的是二进制,这是因为计算机的计算单元由逻辑门组成,它们只能接收 0 和 1,因此计算机使用二进制。
关于数据含义
计算机不知道数据的含义,只负责数据计算。数据的含义由使用的人作为解释者解释。计算机只提供计算能力,这意味着程序和数据都不归计算机管。例如,二进制 000011110001111 的含义由使用这个数据的程序解释。
计算机是如何表达图片的?
放大任何一张照片,你会看到图片由许多小格子组成,这些小格子是像素格子。像素越高,照片越细腻。每个像素格子代表一种颜色,颜色通过 RGB (Red Green Blue) 表示,每种颜色分为 256 个等级,总共可以表示 256256256 种颜色。你可以通过这个网址自己进行调色。
基础常识
byte&word
由于1个bit只能表示两种状态,我们需要以某种方式组装更多bit以表示更多含义,习惯于使用byte和word。
- 1byte = 8 bit
- 1byte 有256个状态
- 1word = 取决于架构的定义,1word = 指针的大小,也就是可以寻址的范围
二进制&转换&数据类型大小
这部分内容过于基础,不在这里展开。
内存编址
内存是字节寻址的,这意味着我们编程时说的地址+1的含义是内存地址按照byte编址。
数据类型的存储
例如,int a 占用四个字节,起始位置从某个地址开始。访问 a 时,我们给CPU的地址是起始位置的地址。
大小端
大小端让类型存储变得稍微复杂。我们知道:
- 一个
int占 4 个byte 内存 - 变量
int a表示的是占用4个内存的首地址
但是内存中的实际存放顺序可能与我们想的不一样,CPU自己决定数字放在这4个内存的顺序,并且读取的时候,按照存放顺序取出来。
bitwise基本计算
- 逻辑运算:使用
&、|、^和~分别对应或、与、XOR 以及取反。 - 位移计算:
- 左移:抛弃掉左边的bit,右边的bit使用0填充。
- 逻辑右移:抛弃掉右边的bit,左边的bit使用0填充。
- 算数右移:抛弃掉右边的bit,左边的bit使用符号位填充。
符号位
使用最高有效位表示符号,例如 1011 如果是无符号则是 11,有符号则是 -3。
bitwise高阶计算
- 设置某个bit为1:使用 OR 操作和掩码。
- 设置某个bit为0:使用 AND 操作和掩码。
- 反转某个bit:使用 XOR 操作和掩码。