0
点赞
收藏
分享

微信扫一扫

二进制 y 位变为 y+1位

霍华德 2022-03-23 阅读 50
位运算
#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)

举报

相关推荐

0 条评论