文章目录
一元操作符
只能操作一个值:
++||- -递增递减等
运算符在前表示先加后运算,在后表示先运算后加:
a=1 (a++)+null=1 a+null=2
该运算符可运用与字符串、布尔值、浮点数、对象。
在布尔值中是把true或false转换为数值型进行操作。
字符串不包含数字,会转换成NaN数值型操作。
注意=+与+=不同,=+无效。
位操作符
对于有符号的整数来说,存储在32位中的前31位是数值,第32位存储的0是整数1是负数,这就是符号位。
负数的粗存方式是反码
运算方式如下:
- 先得到正数的二进制数
例如:-2的二进制是
100000000000000000000000000000010
得到正2的二进制数就是:00000000000000000000000000000010 - 然后求其二进制反码,就是0与1互换:
11111111111111111111111111111101 - 最后二进制反码加1:
11111111111111111111111111111110即-2
注意上述是有符号的整数。
按位非(NOT)
由波浪线(~)表示,返回数值的反码。
例:num=2; num1=~num ;则 mun1={11111111111111111111111111111101}
按位与(AND)
由与符号(&)表示,返回值为两个数对应二进制位数值相同的值,怎么理解呢:
2的二进制是00000000000000000000000000000010;
25是00000000000000000000000000011001;
那么 2&25结果就是 1。
按位或(OR)
由竖线符号(|)表示,与或运算相似,会把有1的位数返回,只要两个数中有1的位数就返回!!
按位异或(XOR)
由插入符号(^)表示,返回值为二进制数位只有一个1的值,与按位或很相似,但是不会返回两个数字相同二进制位数都是1的值!
左移
由两个小于号(<<)表示,会把1的位数向左移:
2的二进制数为 10
那么2<<5二进制就等于 1000000
左移不会影响符号位(32位)。
有符号的右移
由两个大于号(>>)表示,但不同的是,在右移的过程中,空位的出现是在符号位的右侧,所以ECMAScript会用符号位填写空缺部分。
无符号的右移
由三个大于号表示(>>>)
这里有一个问题:当负数无符号二