#include <iostream>
/**********************************************************
【例题】循环输入,每组数据给定两个数 x,y,输出 z 的值,其中 z 的定义为
x 二进制位从低数的第 y 位变成 y+1 位的值
**********************************************************/
int main()
{
int x, y;
int a, b, ret;
while (std::cin >> x >> y)
{
a = x & ~(1 << y);
b = (x >> (y + 1)) & 1;
ret = a | (b << y);
std::cout << ret << std::endl;
}
return 0;
}
需要将 x 的二进制第 y 位清零,然后再把 y+1 位取出来,位或上去
将 x 的二进制第 y 位清零 a = x & ~(1 << y)
取出 y+1 放入 b 中 b = (x >> (y + 1)) & 1
再将 y+1 位的值位或到第 y 位上 a | (b << y)