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

求助:用指定位运算符实现C语言的条件返回函数counter1To5

修正后的C语言实现

首先分析原代码的问题:当输入x≥5时,((x + ~4) >> 31)的结果是0(因为x+~4等价于x-5,x≥5时结果非负,右移31位后符号位为0,全0),此时0 & (x+1)返回0,但题目要求此时返回1,这是核心错误。

修正后的代码利用符号位掩码实现条件选择,符合运算符限制:

int counter1To5(int x) {
    int mask = (x + ~4) >> 31;
    return ((x + 1) & mask) | (1 & ~mask);
}

逻辑解释

  1. 掩码构造:x + ~4等价于x - 5(补码特性:~n = -n -1,所以x + ~4 = x + (-4 -1) = x -5)。将结果右移31位(针对32位有符号整数):
    • 若x < 5,x-5为负数,右移31位后得到全1的二进制(即-1),此时mask = -1
    • 若x ≥5,x-5为非负数,右移31位后得到全0的二进制,此时mask = 0
  2. 条件选择:
    • 当x <5时,(x+1) & mask保留x+1(因为-1与任何数按位与都等于原数),1 & ~mask为0(~mask是0),最终结果为x+1
    • 当x ≥5时,(x+1) & mask为0,1 & ~mask保留1(~mask是-1),最终结果为1

验证示例

  • counter1To5(2):mask=(2-5)>>31=-1,(2+1)&-1=3,1&0=0,返回3|0=3,符合要求
  • counter1To5(5):mask=(5-5)>>31=0,(5+1)&0=0,1&-1=1,返回0|1=1,符合要求
  • counter1To5(4):返回5,符合1<=f(x)<=5的限制
  • counter1To5(6):返回1,符合要求

运算符计数

总共使用的运算符次数:~(1)、+(2)、>>(1)、&(2)、~(1)、|(1),合计8次,远低于15次的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:55:26