当前位置 博文首页 > dadalaohua的博客:【位操作笔记】判断两个整数的符号位是否相反

    dadalaohua的博客:【位操作笔记】判断两个整数的符号位是否相反

    作者:[db:作者] 时间:2021-07-27 14:48

    判断两个整数的符号位是否相反

    判断两个整数的符号位是否相反,也就是两个数是否一个是正数,一个是负数。

    算法说明

    该算法通过异或的结果大小来判断两个整数的符号位是否相反。

    实现代码

    bool Detect_opposite_signs(int x, int y)
    {
        return ((x ^ y) < 0);
    }
    

    算法计算过程

    第一步,x ^ y,两个整数先进行异或。

    第二步,判断异或的结果是否小于0,如果两个整数的符号位相反,那么异或的结果就会让最高位的符号位为1,也就是异或得到的数会小于0,反之大于等于0则表示两个正数符号位相同。

    计算示例

    假设x = 10 , y = 5

    x ^ y = 10 ^ 5 = 0xA ^ 0x5 = 0
    

    结果等于0,表示符号位相同。

    假设x = 10 , y = -5

    x ^ y = 10 ^ -5 = 0xA ^ 0xFFFFFFFB = 0xFFFFFFF1 < 0
    
        0000 0000 0000 0000 0000 0000 0000 1010
    ^   1111 1111 1111 1111 1111 1111 1111 1011
    -------------------------------------------
        1111 1111 1111 1111 1111 1111 1111 0001
    

    结果小于0,表示符号位相反。


    [参考资料]

    Bit Twiddling Hacks By Sean Eron Anderson


    本文链接:https://blog.csdn.net/u012028275/article/details/113280013

    cs