js 移位操作符

来源:互联网 发布:js中的引用类型 编辑:程序博客网 时间:2024/06/05 22:53

1、左移运算

 

   左移运算由两个小于号表示(<<)。它把数字钟的所有数位向左移动指定的数量。例如,把数字2左移5位没结果为64(等于二进制中的1000000)。

 

   var iOld = 2;   //二进制位10

 

   var iNew = iOld << 5;   //二进制位1000000 等于 64

 

   注意,在左移数位时,数字右边多出5个空位。左移运算用0填充这些空位,使结果为完整的32位数字。

 

   左移操作保留数字的符号位。例如,如果把-2左移5位,得到的是-64,而不是64。需要注意的是,符号(二进制中的第32位)仍然存储在第32位中。上面代码2的左移详解如下:

 

   0000 0000 0000 0000 0000 0000 0000 0010 = 2

   0000 0000 0000 0000 0000 0000 0100 0000 左移5位(空白处由0补充) = 64

 

   2、有符号右移运算

 

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

 

   var iOld = 64;   //二进制为:1000000

 

   var iNew = iOld >> 5;   //二进制为:10 ,结果为2

 

   同样,移动数位后会造成空位。空位位于数字的左侧,但位于符号位(二进制的第32位)之后。空位使用符号位填充:(就是说如果二进制第32位是1,那么空位都由1填充,反之雷同。)

 

   0000 0000 0000 0000 0000 0000 0100 0000 = 64

   0000 0000 0000 0000 0000 0000 0000 0010 = 2

  

   3、无符号右移运算

 

   无符号右移由三个大于号(>>>)表示,它将把无符号 32位数中的所有数位整体右移。对于整数,无符号右移运算的记过与有符号由于运算一样。用有符号右移运算的中例子,把64右移5位,将变为2。对于负数, 情况就不同了。无符号右移运算用0填充所有空位。对于整数,这与有符号右移运算的操作完全一样,而负数则被作为整数来处理。由于无符号右移运算的记过是一 个32位的正数,所以负数的无符号右移运算得到的总是一个非常大的数字,例如把-64右移5位,其结果为134217726。

 

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

 

   var iUnsigned64 = -64 >>> 0;  

 

   然后,用Number类型的toString()方法获取它的真正的位表示,采用的基数为2: alert(iUnsigned64.toString(2));

 

   这将生成:1111 1111 1111 1111 1111 1111 1100 0000,既有符号整数-64的二进制补码表示,不过它等于无符号整数4294967232.处于这种原因,使用无符号右移运算符要小心。


原文地址: http://blog.csdn.net/aerchi/article/details/23163119

本文禁止采集。

作者地址:http://www.aerchi.com


0 0
原创粉丝点击