题目
从标准输入读入一个整数 n、操作类型 op(1 表示置 1,0 表示清 0)以及位数 k,对整数第 k 位二进制执行置位或清零操作,输出修改后的新整数。
输入格式:一行输入三个整数 n op k,以空格分隔。
输出格式:输出操作后的新整数,末尾换行。
数据范围与约定:0 ≤ k ≤ 30,op 取值为 0 或 1。
思路与算法
1. 指定位置 1(按位或掩码)
构造掩码 1 << k,执行 n | (1 << k)。目标位无论原先是 0 还是 1,与 1 或运算后必为 1。
2. 指定位清 0(按位与取反掩码)
掩码取反 ~(1 << k) 使只有第 k 位为 0 其余位全为 1,执行 n & ~(1 << k) 强制清零该位。
完整程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int op = sc.nextInt();
int k = sc.nextInt();
if (op == 1) {
// 第 k 位置 1
n = n | (1 << k);
} else {
// 第 k 位清 0
n = n & ~(1 << k);
}
System.out.println(n);
}
}运行示例
输入:
8 1 1输出:
10