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

位运算比较问题:代码始终输出0,请求排查解决

问题:C语言calculate_the_maximum函数始终输出0的排查与修复

问题背景

我写的calculate_the_maximum函数始终输出0,原本以为是比较逻辑有问题,但调整后还是一样。题目要求如下:

函数说明

完成calculate_the_maximum函数,要求分别输出and、or、xor运算的最大有效值(运算结果必须小于k才会被纳入考量)。

参数说明

  • int n:需考虑的最大整数
  • int k:运算结果必须小于此值才会被纳入考量

输出要求

分别单独输出and、or、xor运算的最大有效值。

我的代码

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
//Complete the following function.


void calculate_the_maximum(int n, int k) {
  //Write your code here.
  int AND=0,OR=0,XOR=0;
  for(int x=1; x<=n ; x++)
    {
        for(int y = x; y<=n; y++)
        {
            if((x&y)>AND) AND = x&y;
            if((x|y)>OR) OR = x|y;
            if((x^y)>XOR) XOR = x^y;
        }
    }
    if(XOR>k || XOR<2 || XOR>n){XOR = 0;}
    if(OR>k || OR<2 || OR>n) OR = 0;
    if(AND>k || AND<2 || AND>n) AND = 0;
    
    printf("%d\n%d\n%d",AND,OR,XOR);
    
}

int main() {
    int n, k;
  
    scanf("%d %d", &n, &k);
    calculate_the_maximum(n, k);
 
    return 0;
}

错误原因

核心问题出在筛选有效值的逻辑完全错误:

  • 题目要求运算结果小于k才纳入考量,但你先计算了全局最大值,再用一堆题目没要求的条件(比如XOR<2、XOR>n)把结果清零,直接导致合法结果被误删。
  • 遍历阶段没有判断结果是否符合小于k的要求,而是先找全局最大值再判断,一旦全局最大值≥k就直接清零,而不是去寻找小于k的最大值。

修正后的代码

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

void calculate_the_maximum(int n, int k) {
    int max_and = 0, max_or = 0, max_xor = 0;
    // 从x+1开始遍历y,避免重复计算(x和y交换,and/or/xor结果不变)
    for (int x = 1; x <= n; x++) {
        for (int y = x + 1; y <= n; y++) {
            int current_and = x & y;
            int current_or = x | y;
            int current_xor = x ^ y;
            
            // 只保留小于k的结果,同时更新对应运算的最大值
            if (current_and < k && current_and > max_and) {
                max_and = current_and;
            }
            if (current_or < k && current_or > max_or) {
                max_or = current_or;
            }
            if (current_xor < k && current_xor > max_xor) {
                max_xor = current_xor;
            }
        }
    }
    printf("%d\n%d\n%d", max_and, max_or, max_xor);
}

int main() {
    int n, k;
    scanf("%d %d", &n, &k);
    calculate_the_maximum(n, k);
    return 0;
}

修正说明

  1. 优化遍历逻辑:y从x+1开始,减少重复计算,提升效率。
  2. 调整有效值判断时机:计算每个运算结果后立即判断是否小于k,同时比当前最大值大才更新,确保最终得到的是符合要求的最大值。
  3. 移除错误限制:删掉了XOR<2等题目未要求的条件,只保留结果 < k的核心判断。
  4. 变量命名更清晰:将原变量名改为max_and、max_or、max_xor,可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:50:33