更新进制转换笔记和添加PHP单位转换函数
This commit is contained in:
71
PHP/单位转换.php
Normal file
71
PHP/单位转换.php
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 单位转换工具函数
|
||||||
|
* 根据用户输入的数值和单位进行转换
|
||||||
|
* @param float $value 要转换的数值
|
||||||
|
* @param string $fromUnit 原始单位 (cm, m, km)
|
||||||
|
* @param string $toUnit 目标单位 (cm, m, km)
|
||||||
|
* @return float 转换后的数值
|
||||||
|
* @throws Exception 当提供的单位无效时抛出异常
|
||||||
|
*/
|
||||||
|
function unitConversion($value, $fromUnit, $toUnit) {
|
||||||
|
// 统一转换为小写以忽略大小写差异
|
||||||
|
$fromUnit = strtolower($fromUnit);
|
||||||
|
$toUnit = strtolower($toUnit);
|
||||||
|
|
||||||
|
// 检查单位是否有效
|
||||||
|
$validUnits = ['cm', 'm', 'km'];
|
||||||
|
if (!in_array($fromUnit, $validUnits) || !in_array($toUnit, $validUnits)) {
|
||||||
|
throw new Exception("无效的单位!请使用 cm、m 或 km");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果单位相同,直接返回原值
|
||||||
|
if ($fromUnit === $toUnit) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 定义转换率(转换到米)
|
||||||
|
$toMeters = [
|
||||||
|
'cm' => 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";
|
||||||
|
}
|
||||||
|
*/
|
||||||
156
表格/进制转换.md
156
表格/进制转换.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
|
|
||||||
|
## 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
|
根据公式转换后变为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. 注意事项
|
||||||
|
|
||||||
|
- 不同编程语言对进制字面量的表示可能略有不同
|
||||||
|
- 处理大数值时要注意溢出问题
|
||||||
|
- 进行位运算时,确保理解二进制补码表示
|
||||||
Reference in New Issue
Block a user