20200226

1、比较运算符

JS中的===,绝对等于(值和类型均相等),如:5===5 //true   5==="5" //false

JS中的!==,不绝对等于(值和类型有一个不相等,或两个都不相等),如:5===5 //false   5==="5" //true

 

2、JAVA位运算符

 

十进制的运算符是加减乘除,而位运算符则是属于二进制的

&:与,如果相对应的位都是1,则返回1,否则返回0;

|:或,如果对应位有1,则返回1,否则(对应位都是0)返回0;

^:异或,如果对应位的值相等,则返回0,否则返回1;

~:按位非,把每一位取反(即0变1,1变0);

<<:按位左移运算符,右操作数按位左移右操作数指定的位数;

>>:按位右移运算符,左操作数按位右移右操作数指定的位数;

>>>:按位右移补零操作符,左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充;

如: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

 

posted @ 2020-02-27 00:08  Kerwin_chyl  阅读(88)  评论(0编辑  收藏  举报