Representing data in a computer

计算机中的所有数据最终都以二进制表示。这一部分整理课程开头关于数据表示的内容:二进制与存储单位、字符编码、整数与浮点数的区别,以及 Python 中与之相关的写法。

位、字节与存储单位

计算机内部只有两种状态,通常用高、低电压表示,对应一位(bit)的 1 和 0。

  • 一位数据为 1 bit。
  • 1 Byte = 8 bits。
  • 1 KB = 1024 Bytes,1 MB = 1024 KB,1 GB = 1024 MB,依此类推。

CPU 读取内存中的内容,将其视作指令并执行。CPU 能处理的指令长度存在上限,这个上限由具体的机器决定。

字符编码:ASCII 与 Unicode

在键盘上,每一个按键在计算机内部都对应一个二进制序列。用于把字母、数字、符号映射到二进制代码的标准,最早是 ASCII(American Standard Code for Information Interchange)。

  • ord() 把字符转换为对应的 ASCII 码。
  • chr() 把 ASCII 码转换回字符。

ASCII 只能表示有限的字符。现在通行的编码标准是 Unicode,它涵盖了中文等更多语言的字符。

数字的表示与进制

计算机中的数字分为整数(int)和浮点数(实数,float)。整数可以被完整、精确地存储,而浮点数只是近似保存。

在 Python 中书写不同进制的整数时:

  • 默认是十进制。
  • 0b 前缀表示二进制,例如 0b1010。
  • 0o 前缀表示八进制。
  • 0x 前缀表示十六进制。
  • 可以用下划线分隔数字而不影响计算,例如 1_000_000,方便阅读。

整数在机器中通常用补码表示。对整数的每一位取反记作 ~x,并且

x+ ∼x=−1.x + \,\sim x = -1.

浮点数并不精确,因此应当尽量避免在需要精确结果的地方使用浮点数:

  • a / b 的结果总是浮点数。
  • a // b 只有在 a、b 都是整数时才输出整数。
  • 科学计数法写作 aeb,表示 a×10ba \times 10^{b}(a 不能省略)。

程序的基本结构与表达式

一个程序通常由变量定义、输入输出、条件判断、循环和函数组成。

Python 中的基本运算与比较:

  • 四则运算:+、-、*、/。
  • 幂运算:a ** b 表示 aba^b。
  • 比较运算返回 True 或 False:>、<、==、>=、<=、!=。

数值和字符串是不同的类型。123 是数字,而 "123" 是字符串。由于所有数据都是二进制,数字与字符串在内存中的编码并不相同,书写时必须区分。

字符串与转义字符

字符串是一串字符,用单引号或双引号标注,例如 "SJTU"、'上海交通大学'。

  • 三引号 """...""" 或 '''...''' 可以格式化地输出多行文本;若想取消自动换行,可以在行末加 \。
  • 转义字符以 \ 开始,用来表示键盘上不直接定义的符号:\n 换行,\t 制表符,\\ 表示一个反斜杠。
  • 在字符串前加 r 可以关闭转义,例如 print(r"a\a\a") 会原样输出。

一点体会

课程里反复强调的一件事是动手尝试。语法可以被记住,但编程能力来自一遍又一遍地写、运行和调试。