# 进制转换笔记 ## 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. 注意事项 - 不同编程语言对进制字面量的表示可能略有不同 - 处理大数值时要注意溢出问题 - 进行位运算时,确保理解二进制补码表示