美文网首页
8_4位运算比较大小

8_4位运算比较大小

作者: X_Y | 来源:发表于2017-09-29 11:46 被阅读29次

    对于两个32位整数a和b,请设计一个算法返回a和b中较大的。但是不能用任何比较判断。若两数相同,返回任意一个。

    给定两个整数a和b,请返回较大的数。

    测试样例:
    输入:1,2
    返回:2

    class Compare {
    public:
        int flip(int n)
        {
            return n^1;
        }
        int sign(int n)
        {
            return flip((n>>31) & 1);
        }
        int getMax(int a, int b) {
            // write code here
            // 整数位1,负数为0
            int as = sign(a);
            int bs = sign(b);
            int cs = sign(a-b);
            int diff_ab = as^bs; // 不同为1,相同为0
            int same_ab = flip(diff_ab); //相同为1,不同为0
            int returnA = diff_ab*as + same_ab*cs;
            int returnB = flip(returnA);
            return a*returnA + b*returnB;
        }
    };
    

    相关文章

      网友评论

          本文标题:8_4位运算比较大小

          本文链接:https://www.haomeiwen.com/subject/rhhiextx.html