• careercup-位操作5.1


    5.1 写程序使整数N中第i位到第j位的值与整数M中的相同。

    题目

    给定两个32位的数,N和M,还有两个指示位的数,i和j。 写程序使得N中第i位到第j位的值与M中的相同(即:M变成N的子串且位于N的第i位和第j位之间)

    例子:

    输入: N = 10000000000, M = 10101, i = 2, j = 6

    输出: N = 10001010100

    解答

    方案1:先将N中第0位到第i位保存下来(左闭右开:[0, i)),记作ret, 然后将N中第0位到第j位全清0([0, j]),通过向右移动j+1位然后再向左移动j+1位得到。 最后用上面清0后的值或上(m<<i)再或上ret即可。

    代码如下:

    int update_bits(int n, int m, int i, int j){
        int ret = (1 << i) -1;
        ret &= n;
        return ((n>>(j+1)) << (j+1)) | (m<<i) | ret;
    }

    方案2:用一个左边全为1,中间一段全为0(这段的长度与m长度一样), 右边全为1的掩码mask去和n按位与,得到的值是将n中间一段清0的结果。 然后再与m左移i位后按位或,得到最终结果。

    代码如下:

    int update_bits1(int n, int m, int i, int j){
        int max = ~0;   //全为1
        int left = max - ((1 << j+1) - 1);
        int right = ((1 << i) -1);
        int mask = left | right;
        return (n & mask) | (m << i);
    }
  • 相关阅读:
    TableViewCell bug
    iOS系统框架概述
    Cocoapods的安装与使用
    ios开发学习路径
    django第七天总结
    django第六天上课总结
    django第四天
    django第四天上课总结
    django第三天 小记
    django第三天
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4148475.html
Copyright © 2020-2023  润新知