diff --git a/PHP/单位转换.php b/PHP/单位转换.php new file mode 100644 index 0000000..1fee592 --- /dev/null +++ b/PHP/单位转换.php @@ -0,0 +1,71 @@ + 0.01, // 厘米到米 + 'm' => 1, // 米到米 + 'km' => 1000 // 千米到米 + ]; + + // 定义从米转换的率 + $fromMeters = [ + 'cm' => 100, // 米到厘米 + 'm' => 1, // 米到米 + 'km' => 0.001 // 米到千米 + ]; + + // 转换逻辑:先转换为米,再转换为目标单位 + $valueInMeters = $value * $toMeters[$fromUnit]; + $convertedValue = $valueInMeters * $fromMeters[$toUnit]; + + return $convertedValue; +} + +/** + * 格式化显示转换结果 + * @param float $value 原始数值 + * @param string $fromUnit 原始单位 + * @param float $result 转换后数值 + * @param string $toUnit 目标单位 + * @return string 格式化的结果字符串 + */ +function formatResult($value, $fromUnit, $result, $toUnit) { + return "{$value} {$fromUnit} = {$result} {$toUnit}"; +} + +// 示例用法(可选) +/* +try { + // 测试不同转换场景 + echo formatResult(100, 'cm', unitConversion(100, 'cm', 'm'), 'm') . "\n"; + echo formatResult(1, 'm', unitConversion(1, 'm', 'cm'), 'cm') . "\n"; + echo formatResult(5, 'km', unitConversion(5, 'km', 'm'), 'm') . "\n"; + echo formatResult(1000, 'm', unitConversion(1000, 'm', 'km'), 'km') . "\n"; +} catch (Exception $e) { + echo "错误: " . $e->getMessage() . "\n"; +} +*/ diff --git a/表格/进制转换.md b/表格/进制转换.md index d6ebcf9..2250ddb 100644 --- a/表格/进制转换.md +++ b/表格/进制转换.md @@ -1,3 +1,155 @@ -B1:="0x"&TEXT(DEC2HEX(VALUE(MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789")),10^9))),"0000") -A1:D100 -根据公式转换后变为0x0064 \ No newline at end of file +# 进制转换笔记 + +## 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. 注意事项 + +- 不同编程语言对进制字面量的表示可能略有不同 +- 处理大数值时要注意溢出问题 +- 进行位运算时,确保理解二进制补码表示 \ No newline at end of file