题目

从标准输入读入一个非负整数 n 和一个非负整数 k,取出并输出该整数二进制补码表示中的第 k 位(从右往左第 0 位起算)。

输入格式:一行输入两个非负整数 n 和 k,以空格分隔。

输出格式:输出单个数字 0 或 1,表示第 k 位二进制值,末尾换行。

数据范围与约定:0 ≤ n ≤ 2×109,0 ≤ k ≤ 31。

思路与算法

1. 逻辑右移对齐
将目标数逻辑右移 k 位:n >> k,将第 k 位数字移到最低位。

2. 提取最低位
与 1 进行按位与操作:(n >> k) & 1,只保留最低位,其余高位清零,得出 0 或 1。

完整程序

import java.util.Scanner;

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

        // 提取第 k 位二进制:右移 k 位后与 1 做与运算
        int bit = (int) ((n >> k) & 1);
        System.out.println(bit);
    }
}

运行示例

输入:

13 3

输出:

1