20200226

一、比較運算符算法

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

本站公眾號
   歡迎關注本站公眾號,獲取更多信息