JS运算符和进制转换

>>表示是带符号的右移

按照二进制把数字右移指定数位,高位如符号位为正补零,符号位负补一,低位直接移除

8>>1  // 4
-8>>1 // -4

>>>表示无符号的右移

按照二进制把数字右移指定数位,高位直接补零,低位移除!

8>>>1 // 4
-8>>>1 // 2147483644

应用示例

取中间数(自动减去小数位)
4>>1  //2
5>>1  //2

~符号

按位非运算符,简单的理解就是改变运算数的符号减去1(舍去小数),当然,这是只是简单的理解能转换成number类型的数据.总结:方向取反,奇偶取反,数值向0靠近1个count

typeof var(数据类型) !== ”number”的类型来说,进行运算时,会尝试转化成32位整形数据,如果无法转换成整形数据,就转换为NaN;继而转为-1

~3.7 == -4    // -3.7 - 1 = -4.7  --> -4 
~-2.9 == 1    // 2.9 -1 = 1.9 -->1
~-1 == 0 
~~2.9 == 2
~~ -2.9 == -2
----------------------------------------------------
以下不能转为Number类型全为 -1
~{} == -1
~[] == -1
~NaN ==-1
~function(){} == -1

应用示例

var str = 'abc'

before:

alert(str.indexOf('d') != -1 ? '有字母d' : '没有字母d')
----------------------------------------------------
after:

alert(~str.indexOf('d') ? '有字母d' : '没有字母d')

&运算符

二进制安位与:
4 & 2           3 & 2
0100            0011
0010            0010
----            ----
0000  ->0       0010  ->2

应用示例

JS中的主要用来判断奇偶:
3 & 1 -> 1
4 & 1 -> 0    

进制转换

<其他进制 转为 十进制>
parseInt("11", 2); // 3    2进制转10进制 
parseInt("77", 8); // 63   8进制转10进制
parseInt("af", 16); //175  16进制转10进制

<十进制 转为 其他进制>
(152).toString(2) // "10011000"; 先用括号将152转换“包”成一个对象.
或者如下写法:
152..toString(2) // 这里第一个点将152转换成float类型的小数,第二个点是引出对象方法;
152..toString(16) // "98" : 十进制转16进制