计算机基础知识

关于编码

  1. ASCII 码。ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的一位统一规定为0。
  2. Unicode。将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。但Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。会带来以下问题:第一是如何才能区别 Unicode 和 ASCII ?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果 Unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储来说是极大的浪费。
  3. UTF-8。UTF-8是编码规则,是互联网上使用最广的一种 Unicode 的实现方式,其他实现方式还包括 UTF-16(字符用两个字节或四个字节表示)和 UTF-32(字符用四个字节表示),不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8 是 Unicode 的实现方式之一。

无符号和有符号

在计算机中无符号数用原码表示, 有符号数用补码表示;无符号数都是非负数;有符号数包含负数

浮点数

主要是浮点数的表示方法;https://generalthink.github.io/2016/02/14/float-number-in-computer/

类似科学计数法,但是会有一些特殊的规定

从用模取余的计算方式,在计算机中可以将减法变成加法进行操作

涉及到移码操作;解释:科学计数法中的 E 是可以出现负数的,所以 IEEE 754 规定,E 的真实值必须再减去一个中间数,对于 8 位的 E,这个中间数是 127;对于 11 位的 E,这个中间数是 1023。 比如,2^10 的 E 是 10,所以保存成 32 位浮点数时,必须保存成 10+127=137,即 10001001。

E表示指数位

异常控制流

CPU在会因为内部的异常或外部中断而打断程序的正常控制流

用户态和内核态

参考

> 可在下面留言(需要有 GitHub 账号)