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

二进制数第i位打印错误排查:代码输出结果与预期不符

问题诊断

你的代码核心bug是把十进制数值当成二进制来用了。Java里写1010110会被编译器解析为十进制整数,而你实际想使用的是二进制1010110。

十进制1010110的二进制是1111011010000111110,和你预期的7位二进制数完全不是一回事,这就导致所有位的输出结果都不符合预期。

修复步骤

要在Java中表示二进制数,必须在数字前加0b前缀。修改x的赋值即可解决问题,有两种方式:

  • 直接用二进制字面量(和你预期的数值直观对应):
    int x = 0b1010110;
    
  • 用该二进制对应的十进制值(0b1010110等于十进制的86):
    int x = 86;
    
结果验证

修复后,我们核对你提到的几个位(注意:位操作默认从右往左数,最右边的是第1位,对应2^0次方):

  • 二进制1010110的第4位(2^3位):0
  • 第6位(2^5位):0
  • 第7位(2^6位):1

如果你的计数习惯是从左往右数,最左边是第1位,可以修改ithBit方法的位移逻辑:

public static int ithBit(int x, int n) {
    // 针对7位二进制数,从左往右数第n位
    int bitValue = (x & (1 << (7 - n))) != 0 ? 1 : 0;
    return bitValue;
}

此时从左往右数的第4位是0,第6位是1,第7位是1,和你预期的逻辑匹配。

完整修复代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int x = 0b1010110; // 替换成二进制字面量或十进制86
        System.out.println("the ith bit is " + ithBit(x, n));
    }

    public static int ithBit(int x, int n) {
        // 默认位从右往左数,第1位为最低位
        return (x & (1 << (n - 1))) != 0 ? 1 : 0;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:05:31