js 位运算

位运算 NOT

位运算 NOT 由非 ~ 表示,它是 ECMAScript 中为数不多的与二进制算术有关的运算符之一。

        var iNum1 =25;
        var iNum2 = ~iNum1;
        document.write(iNum2); // 输出 -26

位运算 NOT 实质上是对数字求负,然后减 1,因此 25 变 -26。

位运算 AND

位运算 AND 由与 & 表示,直接对数字的二进制形式进行运算。

        var iResult = 25 & 3;
        document.write(iResult); // 输出 1
        // 0001 1001
        // 0000 0011
        // 0000 0001

与运算:两个1为1。

位运算 OR

位运算 OR 由或 | 表示,也是直接对数字的二进制形式进行运算。

        var iResult = 25 | 3;
        document.write(iResult); // 输出 27
        // 0001 1001
        // 0000 0011
        // 0001 1011

或运算:有1为1。

位运算XOR

位运算 XOR 由符号 ^ 表示,当然,也是直接对二进制形式进行运算。

        var iResult = 25 ^ 3;
        document.write(iResult); // 输出 26
        // 0001 1001
        // 0000 0011
        // 0001 1010

^运算:相同为0,不同为1。

左移运算

左移运算由两个小于号表示 << 。它把数字中的所有数位向左移动指定的数量。
注意:左移运算保留数字的符号位(位移时空出符号位)。

有符号右移运算

有符号右移运算符由两个大于号表示 >> 。它把 32 位数字中的所有数位整体右移,同时保留该数的符号(正号或负号)。有符号右移运算符恰好与左移运算相反。例如,把 64 右移 5 位,将变为 2:

        var iOld = -64;		//等于二进制 -1000000
        var iNew = iOld >> 5;	//等于二进制 -10 十进制 -2
        document.write(iNew); // 输出 -2

无符号右移运算

无符号右移运算符由三个大于号 >>> 表示,它将无符号 32 位数的所有数位整体右移。对于正数,无符号右移运算的结果与有符号右移运算一样。

        var iOld = 64;		//等于二进制 1000000
        var iNew = iOld >> 5;	//等于二进制 10 十进制 2
        document.write(iNew); // 输出 2

对于负数,情况就不同了。

无符号右移运算用 0 填充所有空位。对于正数,这与有符号右移运算的操作一样,而负数则被作为正数来处理。

由于无符号右移运算的结果是一个 32 位的正数,所以负数的无符号右移运算得到的总是一个非常大的数字。例如,如果把 -64 右移 5 位,将得到 134217726。如何得到这种结果的呢?

要实现这一点,需要把这个数字转换成无符号的等价形式(尽管该数字本身还是有符号的),可以通过以下代码获得这种形式:

var iUnsigned64 = -64 >>> 0;

然后,用 Number 类型的 toString() 获取它的真正的位表示,采用的基为 2:

alert(iUnsigned64.toString(2));

这将生成 11111111111111111111111111000000,即有符号整数 -64 的二进制补码表示,不过它等于无符号整数 4294967232。

出于这种原因,使用无符号右移运算符要小心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值