从二进制、八进制、十六进制这些数制基础讲起,再逐语言解析关键字:每个关键字是做什么的、该怎么用,配中文讲解与代码示例。顶部搜索框可跨语言全局检索。
计算机只认识 0 和 1(一个开关的开与关),所以二进制是机器的母语。但二进制写起来太长,人们又发明了八进制(3 位二进制一组)和十六进制(4 位一组)来缩写。理解这三种进制,是读懂所有编程语言的第一步。
每一位是一个 bit,8 位 = 1 字节。CPU 指令、内存、网络传输的底层都是它。
0b1010 = 10
3 位二进制合为 1 位八进制。Unix 文件权限 0o755 就是最经典的应用。
0o17 = 15
4 位二进制合为 1 位十六进制。颜色 #FF8800、内存地址都用它表示。
0xFF = 255
人类日常用的进制。程序里不带前缀的数字默认都是十进制。
42 就是 42
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0000 | 0 | 0 |
| 1 | 0001 | 1 | 1 |
| 2 | 0010 | 2 | 2 |
| 3 | 0011 | 3 | 3 |
| 4 | 0100 | 4 | 4 |
| 5 | 0101 | 5 | 5 |
| 6 | 0110 | 6 | 6 |
| 7 | 0111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
| 语言 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| C / C++ | 0b1010(C23/GCC扩展) | 017(0 开头) | 0xFF |
| Python | 0b1010 | 0o17 | 0xFF |
| Java | 0b1010 | 017(0 开头) | 0xFF |
| Go | 0b1010 | 0o17 | 0xFF |
| C# | 0b1010 | 无字面量(用 Convert) | 0xFF |
| JavaScript | 0b1010 | 0o17 | 0xFF |
| Rust | 0b1010 | 0o17 | 0xFF |
| BASIC | &B1010 | &O17 | &HFF |
| DOS 批处理 | — | set /a n=017 | set /a n=0xFF |
017 是八进制(= 十进制 15),不是十进制的 17!新手最容易在这里踩坑。Python 3 已废除这种写法,必须用 0o17。| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
| & | 按位与:都为 1 才为 1(常用于取掩码) | 0b1100 & 0b1010 | 0b1000 (8) |
| | | 按位或:有一为 1 则为 1(常用于合并标志) | 0b1100 | 0b1010 | 0b1110 (14) |
| ^ | 按位异或:不同为 1(常用于翻转位、简单加密) | 0b1100 ^ 0b1010 | 0b0110 (6) |
| ~ | 按位取反:0 变 1、1 变 0 | ~0b1100 | ...0011 取反 |
| << | 左移:相当于 × 2ⁿ | 0b0011 << 2 | 0b1100 (12) |
| >> | 右移:相当于 ÷ 2ⁿ | 0b1100 >> 2 | 0b0011 (3) |
0o755)、开关标志位、颜色通道提取((0xFF8800 >> 16) & 0xFF 取出红色分量)。