二进制数第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
相关产品推荐
相关产品推荐

