一、比較運算符算法
JS中的===,絕對等於(值和類型均相等),如:5===5 //true 5==="5" //falseide
JS中的!==,不絕對等於(值和類型有一個不相等,或兩個都不相等),如:5===5 //false 5==="5" //truespa
二、JAVA位運算符code
十進制的運算符是加減乘除,而位運算符則是屬於二進制的blog
&:與,若是相對應的位都是1,則返回1,不然返回0;class
|:或,若是對應位有1,則返回1,不然(對應位都是0)返回0;二進制
^:異或,若是對應位的值相等,則返回0,不然返回1;im
~:按位非,把每一位取反(即0變1,1變0);d3
<<:按位左移運算符,右操做數按位左移右操做數指定的位數;總結
>>:按位右移運算符,左操做數按位右移右操做數指定的位數;
>>>:按位右移補零操做符,左操做數的值按右操做數指定的位數右移,移動獲得的空位以零填充;
如:int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */
a & b = 0000 1100 = 12; a | b = 0011 1101 = 61; a ^ b = 0011 0010 = 50;
~15 = (0000 1111) → (1111 0000) = -16 (注意:二進制中,最高位是符號位 1表示負數,0表示正數)
12 << 2 = 0000 1100 = 48; 12 << 3 = 96; 8 << 4 = 128;
由此咱們得出一個快速的算法:M << n = M * 2n
12 >> 2 =
右移和左移實際上是同樣的,可是仍是有點不一樣的,不一樣點在於對於正數和負數補位的時候補的不同,負數補1,正數補0
-8 >> 2
總結一下,關於負數或者正數來講,移位的時候是同樣的,可是在補位的時候,若是最高位是0就補0,若是最高位是1就補1
由此咱們得出一個快速的算法:M >> n = M / 2^n
無符號右移(>>>)只對32位和64位有意義,在移動位的時候與右移運算符的移動方式同樣的,區別只在於補位的時候無論是0仍是1,都補0