You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言invert(x,p,n)函数实现要求及提交的解决方案正确性验证

C语言invert函数实现正确性分析

你给出的解决方案是错误的,不符合需求要求。


错误原因分析

  • 核心逻辑缺陷:你的实现中先将x右移(p+1-n)位,再与低n位全1的数值异或,这个操作直接丢失了x中除了被移动到低n位之外的所有比特信息,完全没有保留其余比特位的原有数值,违反了需求中「其余比特位保持不变」的要求。
  • 测试用例验证:你使用的测试用例invert(6,4,3),6的二进制为00000110(8位表示,比特编号约定从最低位开始从0计数),按需求要取反第4位开始的3个比特(即第4、3、2位):

    原x对应三个比特的值为0(第4位)、0(第3位)、1(第2位),取反后应为1、1、0,其余位保持不变,最终结果应为00011010(即十进制26),而你的代码输出6,明显不符合预期。


正确实现方案

要实现指定位置比特取反、其余位不变的核心逻辑是构造仅目标位为1、其余位为0的掩码,再将x与掩码异或(异或1对应位取反,异或0对应位不变):

  1. 先构造低n位全1的掩码:~(~0U << n),使用0U避免有符号整数左移溢出问题
  2. 将低n位全1的掩码左移到目标位置:<< (p + 1 - n)
  3. x与掩码异或得到最终结果

正确代码示例

#include <stdio.h>

unsigned invert(unsigned x, int p, int n)
{
    unsigned mask = ~(~0U << n) << (p + 1 - n);
    return x ^ mask;
}

int main()
{ 
    printf("%d\n", invert(6, 4, 3)); // 输出26,符合需求预期
    return 0;
}

内容的提问来源于stack exchange,提问作者gautam bhuyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 03:06:08