一、位运算符
【转换成二进制进行运算】
1.定义
& 与 都为1结果为1
| 或 只要有1结果为1
^ 异或 相同为0不同为1
~ 非 0变1,1变0
>> 右移
<< 左移
2.非运算
~正数 ~n=> -(n+1)
~负数 (|n|-1)
console.log(3&2) //2
【转化为二进制数011 & 010———> 相同为1,不同为0——> 010=>2】
console.log(3|2) //3
011 | 010==>011=>3
console.log(3^2) //1
console.log(~3) //-4
【011——>(取反)100——>减一011——>再取返100 变符号位】
console.log(~25) //-
11001 00110 00101*** 11010
console.log(25&3) //1
console.log(25|3) //27
console.log(25^3) //26
console.log(~25) //-24
console.log(~(-27)) //26
console.log(64>>5) //2
console.log(255&85) //85
js 数值类型——64位
32位 最高位:符号位
18位
18 ————10010
00000000 00000000 00000000 00010010 18
11111111 11111111 11111111 11101101 取反
11111111 11111111 11111111 11101110 加一:逢2进1
****
~18 得 -19
00000000 00000000 00000000 00010010
11111111 11111111 11111111 11101101 ~后
11111111 11111111 11111111 11101100 减一
00000000 00000000 00000000 00010011 取反 19
加负号 -19
****
左移<<
2<<5 向左移动5位
00000000 00000000 00000000 00000010 //2
000 00000000 00000000 0000001000000 //左移5位,空出低位补0
-2<<5
11111111 11111111 11111111 11111101 取反
11111111 11111111 11111111 11111101 加一
111 11111111 11111111 1111110100000 左移5位
000 00000000 00000000 00000001000000
>>右移 有符号右移
>>>右移 无符号右移
64>>5
00000000 00000000 00000000 01000000 64
0000000000000 00000000 00000000 010 右移动,高位补0
-64>>5
00000000 00000000 00000000 01000000
11111111 11111111 11111111 10111111 取反
11111111 11111111 11111111 11000000 -64
1111111111111 11111111 11111111 110 有符号右移看符号位如为1,补1
1111111111111 11111111 11111111 101 减一
0000000000000 00000000 00000000 010 取反 //-2
-64>>>5 无符号右移
11111111 11111111 11111111 11000000 -64
0000011111111 11111111 11111111 110 无符号右移,不看符号位,高位全补0
13>>2
1011
00000000 00000000 00000000 00001011
0000000000 00000000 00000000 000010 //2
-13<<2
00000000 00000000 00000000 00001011
11111111 11111111 11111111 11110100 取反
11111111 11111111 11111111 11110101 加一
111111 11111111 11111111 1111010100 左移,地位补0
111111 11111111 11111111 1111010011 减一
000000 00000000 00000000 0000101100 取反 //***44
9<<4
00000000 00000000 00000000 00001001
0000 00000000 00000000 000010010000 //144
255&85
二、三元(目)运算符
a=10
if(a>0){
alert("yes")
}else{
alert("no")
}
a>0?alert("yes"):alert("no")
c=a>0?alert("yes"):alert("no")