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

本站公众号
   欢迎关注本站公众号,获取更多信息