题目

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