题目

将整数第 k 位置 1 或清 0

思路

本题对整数第 k 位(从 0 起)做置 1 或清 0。

置 1:n | (1<<k);清 0:n & ~(1<<k)。读入操作类型与 k 后更新 n 并输出。

解题分析

置 1:n |= (1u<<k);清 0:n &= ~(1u<<k)。掩码用 unsigned 避免移位符号问题。

完整程序

#include <stdio.h>

int main(void)
{
    unsigned n;
    int k, op;
    if (scanf("%u %d %d", &n, &k, &op) != 3 || k < 0 || k >= 32) {
        return 1;
    }
    unsigned mask = 1u << k;
    if (op == 1) {
        n |= mask;
    } else {
        n &= ~mask;
    }
    printf("%u\n", n);
    return 0;
}

运行示例

输入:

8 1 1

输出:

10