用按位与、按位或、按位取反实现按位异或

我们知道,使用按位异或可以不用临时变量交换两个整型变量的值

按位异或 可以用 按位与、按位或、按位取反来模拟吗?

<html>
    <head>
        <title>js测试1</title>
        <script type="text/javascript">

            /*
            a    1101=13
            b    1001=9

            a&b    1101 & 1001 = 1001 0的地方证明有0
            a|b    1101 | 1001 = 1101 1的地方证明有1

            !(a&b) = 0110 1的地方证明有0
            !(a|b) = 0010 0的地方证明有1

            !(a&b) & (a|b) = 0100 的地方证明不同 实现异或 
            */

            function exchange(a , b){
                alert("转换前两个数字为:" + a+","+b);
                a = ~(a&b) & (a|b);
                b = ~(a&b) & (a|b);
                a = ~(a&b) & (a|b);
                alert("转换后两个数字为:" + a+","+b);
            }
        </script>
    </head>
        <script type="text/javascript">
            exchange(5,2);
            //alert(1 | 2);
        </script>
    <body>
        
    </body>
</html>

 

posted @ 2014-06-27 22:37  mycome  阅读(1284)  评论(0编辑  收藏  举报