题目
将整数第 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