javaScript:位运算

位运算符:javascript

~(NOT)
把运算数转换为32位数字–>转换为反码–>转换为浮点数
实质上是对数字求负,而后减1: ~25=-26,~-10=9html

&(AND)是对每一个数字中的数位对齐,同一位置的两个数位进行”与”运算
25=0000 0000 0000 0000 0000 0000 0001 1001
3=0000 0000 0000 0000 0000 0000 0000 0011
————————————————————————————————————————————
&=0000 0000 0000 0000 0000 0000 0000 0001 = 1java

|(OR)
是对每一个数字中的数位对齐,同一位置的两个数位进行”或”运算
25=0000 0000 0000 0000 0000 0000 0001 1001
3=0000 0000 0000 0000 0000 0000 0000 0011
————————————————————————————————————————————
|=0000 0000 0000 0000 0000 0000 0001 1011 = 27dom

^(XOR)
是对每一个数字中的数位对齐,同一位置的两个数位进行”异或”运算
25=0000 0000 0000 0000 0000 0000 0001 1001
3=0000 0000 0000 0000 0000 0000 0000 0011
————————————————————————————————————————————
^=0000 0000 0000 0000 0000 0000 0001 1010 = 26函数

<<(左移)
是把全部位数(除了符号位)向左移制定数量,空位用0填充;
2=0000 0000 0000 0000 0000 0000 0000 0010
————————————————————————————————————————————
<<5=0000 0000 0000 0000 0000 0000 0100 0000=64spa

>>(有符号位右移)
是把全部位数(除了符号位)向右移制定数量,空位用0填充;
64=0000 0000 0000 0000 0000 0000 0100 0000
————————————————————————————————————————————
>>5=0000 0000 0000 0000 0000 0000 0000 0010=2code

相似的运算符 &&,||,!他们只运用在boolean运算中,而不是位运算。htm

位运算基于数值数据也就是咱们刚才提到的"integer"(被从64-bits floating point 通过 Toint32方法转化而来的32-bits integer),位运算结束后再被转化成双精度浮点型。blog

 

 Toint32咱们不能调用,也很差猜想内部的实现逻辑,咱们将它的规律总结以下:ip

  一、忽略全部的小数部分

  二、若是超出了32位整型能存储的范围,结果是1的二进制补码(即-1)

  三、若是是一个小于1的小数,结果是0

  四、若是是Infinity(不管正无穷仍是负无穷)或者NAN,结果是0

  五、若是是true返回一、false返回0

  实际上javascript的位运算符并非最快的,由于他们被限制为32位,并且须要从双精度浮点型转换而来而且再转化回去,尽管如此他们比传统的操做符要快,由于他们更接近于底层。

 

 

   下面是和0进行 Or操做的结果,这充分验证了Toint32函数和位运算的内部原理。 

 

ToInt32 (col|0) : Numeric Values.
  -1.6 -0 +0 1 1.6 8 16 16.8 123e-2 -Infinity +Infinity NaN
col|0 -1 0 0 1 1 8 16 16 1 0 0 0

 

ToInt32 (col|0) : String Values.
  "" "-1.6" "0" "1" "1.6" "8" "16.8"

"123

e-2"

"010"
(Octal)
"0x10"
(Hex)
"0xFF"
(Hex)
"-010" "-0x10" "xx"
col|0 0 -1 0 1 1 8 16 1 10 16 255 -10 0 0

 

 

ToInt32 (col|0) : Other Values.
  undefined null true false new Object() function(){
return;
}
col|0 0 0 1 0 0 0

 

代码:

var a = "10"| 0 ;
console.log("Bitwise Or a is : " +a);
var b = "s1132"|0;
console.log("Bitwise Or b is : " +b);
var c = [1,3,2]&1 ;
console.log("Bitwise And c is : " +c);
var d = [1]|0;
console.log("Bitwise Or d is : " +d);
var e = ~function(){}();
console.log("Bitwise Not e is : " +e);
var f = ({})|0;
console.log("Bitwise Or f is : " +f);
var g = ([1])|0;
console.log("Bitwise Or g is : " +g);
var h = "1ss"^0;
console.log("Bitwise Exclusive Or h is : " +h);

var arr=[1,2,3,4,5];
console.log(arr|0);  //0
var arr=[6];
console.log(arr|0);  //6

 

http://www.cnblogs.com/wisdomoon/p/3338327.html

http://www.hehe0.com/javascript-wei-yun-suan-xiao-ji/

相关文章
相关标签/搜索