zoukankan      html  css  js  c++  java
  • 位运算题目

    题目一:

    题目描述:

    函数int bis(int x,int m)(位设置)生成一个结果z,z是由m的位来修改x的位得到的,在m的二进制表示为1的每个位置上,将z对应的位设置为1。

    函数int bic(int x,int m)(位清除)生成一个结果z,z是由m的位来修改x的位得到的,在m的二进制表示为1的每个位置上,将z对应的位设置为0。

    仅使用bis和bic来计算异或运算

    int xor (int x,int y) {
        int result = ____ ;
        return result;
    }

    题目分析:

    容易知道,bis运算等价于OR,bic运算等价于x & ~ m。对于^,有属性x ^ y = (x & ~ y)| (y & ~ x),由此可以得到

    int xor (int x,int y) {
        int result = bis(bic(x, y), bic(y, x));
        return result;
    }

    题目二:

    题目描述:

    不用 '*' '/' 和 '%' 运算实现两个整数的除法

    题目分析:

    例如 16 / 3,可以按照3的倍数来操作。 3 * 1 = 3, 3 * 2 = 6, 3 * 2 * 2 = 12 ...,而2 * 2等可以用位运算方式表示。

    那么有16 - 3 = 13, 13 - 3 * 2 = 7, 而7 < 3 * 2 *2。可以迭代处理,再计算剩下的 7 / 3,依次进行。

    示例代码:

    int divide(int dividend, int divisor) {
       
    long long a = abs((double)dividend), b = abs((double)divisor), ret = 0;
       
    while(a >= b) {
           
    for(long long c = b, i = 0; a >= c; ++i, c <<= 1) {
                a
    -= c;
                ret
    += 1 << i;
            }
        }

       
    return ((dividend ^ divisor) >> 31) ? -ret : ret;
    }
  • 相关阅读:
    27、驱动调试之修改系统时钟中断定位系统僵死问题
    25、驱动调试之打印到proc虚拟文件
    24、驱动调试之printk
    23、uevent/hotplug热拔插机制
    22、DMA驱动程序框架
    21、IIS声卡驱动程序
    20、RTC驱动程序
    ZOJ
    HDU-4272 LianLianKan (dfs)
    UVA-624 CD (01背包+路径记忆)
  • 原文地址:https://www.cnblogs.com/daijinqiao/p/3358747.html
Copyright © 2011-2022 走看看