数据(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 操作和掩码。