Files
BiJi/表格/进制转换.md

155 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 进制转换笔记
## 1. 不同进制表示法
- **十进制(Decimal)**: 普通数字,如 `100`
- **二进制(Binary)**: 前缀 `0b`,如 `0b1100100`
- **八进制(Octal)**: 前缀 `0o``0`,如 `0o144`
- **十六进制(Hexadecimal)**: 前缀 `0x`,如 `0x64`
## 2. 十进制转其他进制
### 2.1 十进制转二进制
方法:**除2取余逆序排列**
示例:十进制 100 转二进制
```
100 ÷ 2 = 50 余 0
50 ÷ 2 = 25 余 0
25 ÷ 2 = 12 余 1
12 ÷ 2 = 6 余 0
6 ÷ 2 = 3 余 0
3 ÷ 2 = 1 余 1
1 ÷ 2 = 0 余 1
```
结果:**0b1100100**
### 2.2 十进制转八进制
方法:**除8取余逆序排列**
示例:十进制 100 转八进制
```
100 ÷ 8 = 12 余 4
12 ÷ 8 = 1 余 4
1 ÷ 8 = 0 余 1
```
结果:**0o144**
### 2.3 十进制转十六进制
方法:**除16取余逆序排列**
示例:十进制 100 转十六进制
```
100 ÷ 16 = 6 余 4
6 ÷ 16 = 0 余 6
```
结果:**0x64**
根据公式转换后变为0x0064
## 3. 其他进制转十进制
### 3.1 二进制转十进制
方法:**按权展开相加**
示例:二进制 0b1100100 转十进制
```
1×2^6 + 1×2^5 + 0×2^4 + 0×2^3 + 1×2^2 + 0×2^1 + 0×2^0
= 64 + 32 + 0 + 0 + 4 + 0 + 0
= 100
```
### 3.2 八进制转十进制
方法:**按权展开相加**
示例:八进制 0o144 转十进制
```
1×8^2 + 4×8^1 + 4×8^0
= 64 + 32 + 4
= 100
```
### 3.3 十六进制转十进制
方法:**按权展开相加**
示例:十六进制 0x64 转十进制
```
6×16^1 + 4×16^0
= 96 + 4
= 100
```
## 4. 二进制与十六进制互转
### 4.1 二进制转十六进制
方法:**四位一组,从右到左**
示例:二进制 0b1100100 转十六进制
```
0110 0100
6 4
```
结果:**0x64**
### 4.2 十六进制转二进制
方法:**一位变四位**
示例:十六进制 0x64 转二进制
```
6 → 0110
4 → 0100
```
结果:**0b01100100** (即 0b1100100)
## 5. 计算机中常用的进制表示
### 5.1 字节表示
- 1字节(Byte) = 8位(bit)
- 十六进制通常用两个字符表示一个字节 (如 0x00 到 0xFF)
### 5.2 有符号和无符号
- 无符号:所有位都表示数值大小
- 有符号:最高位表示符号 (0表示正1表示负)
## 6. 进制转换工具
### 6.1 编程实现
- PHP: `dechex()`, `hexdec()`, `decbin()`, `bindec()`, `decoct()`, `octdec()`
- JavaScript: `Number.toString()`, `parseInt()`
- Python: `bin()`, `oct()`, `hex()`, `int()`
### 6.2 实际应用场景
- 网络编程: IP地址通常用十进制点分表示但内部处理用二进制
- 计算机图形: 颜色值通常用十六进制表示 (如 #FF0000 表示红色)
- 底层编程: 寄存器、内存地址等通常用十六进制表示
## 7. 注意事项
- 不同编程语言对进制字面量的表示可能略有不同
- 处理大数值时要注意溢出问题
- 进行位运算时,确保理解二进制补码表示