酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

基于原码的二进制字符串转十进制整数 C++ 实现

好的,我们来分析一下这个问题,并用 C++ 实现它。 ## 🧠 问题分析 题目要求:输入一个用字符串表示的 **8位原码**(最高位是符号位,从右往左数第8位),输出它对应的十进制整数。 关键约束: - **数值位** 只有最低的4位(bit0 ~ bit3)可能为1,其余高位(bit4 ~ bit6)都是0。 - **符号位** 是最高位(bit7),即字符串的第一个字符。 原码规则: - **符号位**:`0` 表示正数,`1` 表示负数。 - **数值部分**:就是二进制数值,不足4位时高位补0。 例如: - `10000001`:符号位=1(负数),数值位= `0001`(二进制) = 1(十进制),结果为 **-1**。 - `00000010`:符号位=0(正数),数值位= `0010`(二进制) = 2(十进制),结果为 **2**。 ## ✅ C++ 实现步骤 1. **读取输入的字符串**。 2. **检查字符串长度是否为8**。 3. **提取符号位**:`str[0]`。 4. **提取最低4位数值位**并转换为整数(注意字符串后4个字符)。 5. **根据符号位决定正负**: - 符号位为 `'0'`:直接输出数值。 - 符号位为 `'1'`:输出 `-数值`。 ## 📝 代码实现 ```cpp #include <iostream> #include <string> #include <cctype> int main() { std::string original_code; std::cin >> original_code; // 输入校验 if (original_code.length() != 8) { std::cerr << "错误:输入必须是8位原码。" << std::endl; return 1; } for (char c : original_code) { if (c != '0' && c != '1') { std::cerr << "错误:输入只能包含字符 '0' 或 '1'。" << std::endl; return 1; } } // 提取符号位 char sign_bit = original_code[0]; // 提取最低4位数值位(字符串倒数4个字符) std::string magnitude_str = original_code.substr(4, 4); // 从索引4开始取4个字符 // 将二进制字符串转换为整数 int magnitude = 0; for (char c : magnitude_str) { magnitude = magnitude * 2 + (c - '0'); } // 根据符号位输出结果 int result; if (sign_bit == '0') { result = magnitude; // 正数 } else { result = -magnitude; // 负数 } std::cout << result << std::endl; return 0; } ``` ## 🧪 测试样例 | 输入 | 输出 | |-------------|------| | `10000001` | `-1` | | `00000010` | `2` | | `10001111` | `-15`| | `00001111` | `15` | | `10000000` | `0` | ## 💎 关键点解释 - **`substr(4, 4)`**:从索引4开始取4个字符,正好对应位3 ~ 位0(最低4位)。 - **转换二进制字符串为整数**:从左到右遍历,每次乘2再加当前位的值。 - **符号处理**:根据最高位决定最终结果的正负。 - **输入校验**:保障程序健壮性,避免非法输入导致崩溃或错误结果。 ## 🚧 进阶与建议 1. **扩展性**:如果后续需要处理任意位数的原码,可以改为参数化位数,并用 `std::bitset` 库简化。 2. **性能**:当前实现是 O(n),n 为8,已经最优;无需额外优化。 3. **错误处理**:建议增加对空输入、非数字字符、长度不一致等情况的处理。 4. **代码风格**:保持变量命名清晰,优先使用 `const` 标识只读变量,增强可维护性。 ## 📚 相关技术栈推荐 - **C++ 字符串处理**:`std::string` 是基础,掌握 `substr`、`find`、`c_str` 等。 - **位运算**:建议学习 `std::bitset`,非常适合二进制位操作场景。 - **官方参考**:[cppreference.com - std::string](https://en.cppreference.com/w/cpp/string/basic_string) ######[AI写代码神器 | 1075点数解答 | 2026-07-03 19:18:32]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]