当前位置: 面试刷题>> 更新二进制位 (经典算法题500道)


### 完整题目描述 **题目:更新二进制位** 给定一个非负整数 `num` 和一个位位置 `pos`(从 0 开始计数,即最右边的位为第 0 位),以及一个要更新的位值 `val`(`val` 只能是 0 或 1)。请编写一个函数来更新 `num` 在 `pos` 位置的位值为 `val`。注意,你不能使用任何内置的按位操作函数,如 `&`, `|`, `^`, `~` 等。 **示例 1**: ``` 输入: num = 11010, pos = 2, val = 0 输出: 11000 解释: 第 2 位(从右向左数,第 0 位是最右边的位)现在是 1,我们需要将其更新为 0。 ``` **示例 2**: ``` 输入: num = 7, pos = 3, val = 1 输出: 31 解释: 第 3 位(从右向左数,第 0 位是最右边的位)现在是 0,我们需要将其更新为 1。 7 的二进制表示为 111,更新后变为 00011111,也就是 31。 ``` **注意**: - `0 <= num <= 2^31 - 1` - `0 <= pos <= 31` ### PHP 示例代码 ```php function updateBit($num, $pos, $val) { $mask = 1 << $pos; // 创建掩码,将1左移pos位 if ($val === 0) { // 如果val为0,则使用掩码的反码与num进行与操作,实现清零 $num = $num & ~$mask; } else { // 如果val为1,则直接使用掩码与num进行或操作,实现置1 $num = $num | $mask; } return $num; } // 示例调用 echo updateBit(11010, 2, 0); // 输出 11000,十进制表示为 28 echo "\n"; echo updateBit(7, 3, 1); // 输出 31 ``` ### Python 示例代码 ```python def update_bit(num, pos, val): mask = 1 << pos # 创建掩码,将1左移pos位 if val == 0: # 如果val为0,则使用掩码的反码与num进行与操作,实现清零 num = num & ~mask else: # 如果val为1,则直接使用掩码与num进行或操作,实现置1 num = num | mask return num # 示例调用 print(update_bit(11010, 2, 0)) # 输出 11000,十进制表示为 28 print(update_bit(7, 3, 1)) # 输出 31 ``` ### JavaScript 示例代码 ```javascript function updateBit(num, pos, val) { let mask = 1 << pos; // 创建掩码,将1左移pos位 if (val === 0) { // 如果val为0,则使用掩码的反码与num进行与操作,实现清零 // 注意:JavaScript中按位非操作(~mask)将得到一个负数,但由于我们只在二进制层面操作,不影响最终结果 num = num & (~mask); } else { // 如果val为1,则直接使用掩码与num进行或操作,实现置1 num = num | mask; } return num; } // 示例调用 console.log(updateBit(11010, 2, 0)); // 输出 11000,十进制表示为 28 console.log(updateBit(7, 3, 1)); // 输出 31 ``` **码小课** 网站中有更多关于位操作、算法设计和编程技巧的相关内容分享给大家学习,欢迎访问并深入探索。
推荐面试题