题目
从标准输入读入一个非负整数 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