C++位运算置位操作:将二进制指定位置为1的实现方法
好的,我们来一步步分析这个问题,并用 C++ 实现它。 ## 📌 问题分析 题目要求: 1. 给定一个十进制整数 `num`(工厂编号)。 2. 给定一个从右往左的位下标 `x`(从0开始计数)。 3. 将 `num` 的二进制表示的第 `x` 位 **置为 1**(注意不是取反,而是强制变成1)。 4. 输出修改后的十进制数值。 **示例验证**: - 示例1:num=8, x=2 - 8 的二进制:`1000` - 从右往左第2位(0-based)目前是0 - 置1后:`1100` = 12 ✅ - 示例2:num=17, x=1 - 17 的二进制:`10001` - 第1位是0 - 置1后:`10011` = 19 ✅ ## 🛠 解决方案:位运算技巧 **关键运算**:`num | (1 << x)` 解释: - `1 << x` :将数字1左移 `x` 位,得到只在第 `x` 位为1,其余位为0的二进制数。 - `num | mask` :按位或运算。因为任何位与0或保持不变,与1或则置为1。 - 如果原来该位是0,则变为1。 - 如果原来该位已是1,则保持不变。 ## 💻 C++ 代码实现 ```cpp #include <iostream> using namespace std; int main() { int num, x; // 读取输入 cin >> num >> x; // 核心位运算:将第x位置为1 int result = num | (1 << x); // 输出结果 cout << result << endl; return 0; } ``` ## 🔍 代码详解 | 代码行 | 含义 | |--------|------| | `cin >> num >> x;` | 从标准输入读取两个整数 | | `1 << x` | 构造一个只在第x位为1的掩码(mask) | | `num \| mask` | 将num的第x位置为1,其他位不变 | | `cout << result;` | 输出十进制结果 | ## ⚠️ 开发建议与注意事项 1. **边界检查**:虽然题目保证 `x` 在1~10之间,但实际开发中应判断 `x` 是否小于32(int的位数),防止移位越界。 2. **输入验证**:实际项目中建议验证 `num` 和 `x` 是否在合法范围内,并提供友好的错误提示。 3. **可读性**:可以使用 `|=` 运算符简写:`num |= (1 << x);` 但注意这会修改原变量,如果原值后续还需使用,应保留副本。 4. **扩展思考**: - 如果想将某一位**置为0**:`num & ~(1 << x)` - 如果想**翻转**某一位:`num ^ (1 << x)` - 如果想**判断**某一位是否为1:`(num >> x) & 1` ## 📚 相关学习资源 - **位运算基础**:C++ 中的 `&`, `|`, `^`, `~`, `<<`, `>>` 运算符 - **推荐书籍**:《C++ Primer》第5章——位运算部分 - **在线工具**:可以使用 [Bitwise Calculator](https://bitwisecmd.com/) 可视化验证结果 ## ✅ 测试样例 | 输入 (num x) | 运算过程 | 输出 | |--------------|---------|------| | 8 2 | 1000 → 1100 | 12 | | 17 1 | 10001 → 10011 | 19 | | 0 0 | 0 → 1 | 1 | | 31 4 | 11111 → 11111 (已是1,不变) | 31 | ######[AI写代码神器 | 924点数解答 | 2026-07-23 16:21:57]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)425
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)382
- Python实现Q老师成绩管理任务:修改与查看学生成绩(字节豆包 | 191点数解答 | 2025-12-20 20:55:41)152
- Python 代码助力 Q 老师高效管理班级学生成绩:修改与查看一键搞定(字节豆包 | 326点数解答 | 2025-12-27 20:48:12)167
- 数轴旅行:从原点出发,能否到达目标位置?(字节豆包 | 225点数解答 | 2026-01-23 19:51:03)119
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)623
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)533
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)365
- Java 实战:动物类、接口与继承,实现鸟儿吃虫与飞翔功能(字节豆包 | 184点数解答 | 2024-09-19 16:45:48)374
- Java 实现 BankAccount 类:账户余额管理与测试全解析(字节豆包 | 420点数解答 | 2024-10-11 08:48:21)382
- Java 编程:实现教师与学生类的创建、继承及属性操作(字节豆包 | 745点数解答 | 2024-10-16 18:40:42)469
- Java 实现 Circle 类:全面封装圆的属性与方法(字节豆包 | 256点数解答 | 2024-10-27 16:34:37)307