JavaScript ——— 一元操作符与位操作符

- 一元操作符
ECMAScript中最简单的操作符就是一元操作符,它只可以操作一个值。

  • 递增与递减操作符

    递增与递减操作符分为前置型与后置型。

    执行前置递增和递减操作时,变量的值是在语句被求值以前变的。
    如下例:

var num1=2;
var num2=20;
var num3=--num1+num2;  //21
var num4=num1+num2;    //21

后置递增和递减操作是在包含他们的语句被求值以后才执行的。
如下例:

 var num1=2;
 var num2=20;
 var num3=num1--+num2;  //22
 var num4=num1+num2;   //21

适用于整数、字符串、布尔值、浮点数值、对象。在应用于不同的值时,遵循下列规则。

如果是一个包含数字字符的字符串时,先将其转换为数值,在执行加减1的操作。然后将字符串变量转换为数值变量。

如果是一个不包含数字字符的字符串,首先将变量的值设置为NaN,然后将字符串变量变为数值变量。

如果是布尔值false时,先将其转换为数字0,在执行加减的操作,将布尔值变量变为数值变量。

如果是浮点数值时,执行加减1的操作。

如果是对象,先调用对象的valueOf()方法以取得一个可供操作的值。然后对该值应用前述规则,若结果为NaN,则在调用toString()方法后再应用前述规则。对象变量变为数值变量。

  • 一元加和减操作符

    一元加操作符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响。

    一元加操作符应用于布尔值时,false与true被转换为0和1。

    一元加操作符用于字符串值会按照一组特殊的规则进行解析。

    一元操作符应用于对象首先会调用它们的valueOf()和toString()方法,在转换得到的值。

    一元减操作符应用于数值时,该值会变成负数。应用于非数值时,与一元加操作符规则相同,最后将得到的数值转换为负数。

- 位操作符

位操作符用于最基本的层次上,即按照内存中表示数值的位来操作数值。

ECMAScript中的所有数值都以IEEE-754 64位格式存储,但操作符并不直接操作64位值,而是先将64位的值转换为32位的整数,然后执行操作,最后将结果转换位64位。

有符号的整数,第32位叫做符号位,0表正,1表负,前31位用于表示整数值。

正数以二进制格式存储,31位中的每一位都表示2的幂,第一位(位0)表示2的0次方,第二位表示2的1次方,以此类推。

负数以二进制码存储,使用格式位二进制补码。

计算二进制补码的步骤1:求绝对值的二进制码。2:求二进制反码,就是0替换为1,1替换为0。 3:将得到的二进制反码加1。

无符号整数第32位不表示符号,只可以是正整数。

对NaN与Infinity值应用位不表示符号,会被当成0处理。

对于非数值应用位操作符,会先使用Number()函数将该值转换为一个数值,然后应用位操作符,作为一个数值。
  • 按位非(NOT)

    由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码,按位非的本质:操作数的负值减1。

  • 按位与(AND)

    按位与操作符由一个和号字符(&)表示,有两个操作符数。

    按位与的本质:将两个数值的每一位对齐,两个都为真则为真,其余情况为假。

  • 按位或(OR)

    由一个竖线符号(|)表示,有两个操作数,遇到真为真,两个都是假才为假。

  • 按位异或(XOR)

    由一个插入符号(^) 表示,有两个操作数。

    规则是两个操作数不同时为真,相同时为假。

  • 左移

    由两个小于号(<<)表示,将数值所有位向左移动的位数。

    不影响操作数的符号位。

  • 右移

    有符号的右移操作符由两个大于号( >>)表示,将数值向右移动,但保留符号位(即正负号标记)。

    无符号右移操作符由三个大于号(>>>)表示,会将数值的所有32位都向右移动,正数同有符号右移一样。对于负数来说,会把二进制码当成正数的二进制码,会导致结果非常之大。

猜你喜欢

转载自blog.csdn.net/qq_36647038/article/details/80356295