重要但是少用的运算符
先了解
1.原码,反码,补码
正数的反码和补码都与原码相同。
负数的反码为对该数的原码除符号位外各位取反。
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1
2. 负数在计算机中是怎么存的
首先声明在计算机中负数的存储是采用二进制补码的形式的
以-3为例,32位为基础:
原码:00000000 00000000 00000000 00000011
反码:11111111 11111111 11111111 11111100
补码:11111111 11111111 11111111 11111101
1. 按位与运算符 &
对两个表达式执行按位"与"。
每一个位执行按位“与”运算。 如果两个位均为 1,则结果是 1。 否则,结果为 0。
/ 9 is 00000000000000000000000000001001
var expr1 = 9;
// 5 is 00000000000000000000000000000101
var expr2 = 5;
// 1 is 00000000000000000000000000000001
var result = expr1 & expr2;
document.write(result);
// Output: 1
2.按位或运算符 |
对两个表达式执行按位“或”运算。
任何时候,只要其中任意一个表达式有一位为 1,则结果中的该位即为 1。否则,结果中的该位将为 0。
7|11
// 15
7: 00000111
11: 00001011
7|11:00001111
3.按位异或运算符 ^
对两个表达式执行按位“异或”运算。
当且仅当只有一个表达式的某位为 1 时,结果中的该位才为 1。否则,结果中的该位为 0。
5^12
//9
0101 (expression1)
1100 (expression2)
----
1001 (result)
4.按位取反运算符 ~
所有一元运算符(如 ~ 运算符)都按照下面的规则来计算表达式的值:
- 如果应用于未定义的表达式或 null 表达式,则会引发一个运行时错误。
- 将对象转换为字符串。
- 如果可能,将字符串转换为数字。否则,将引发运行时错误。
- 布尔值被视为数字(如果为 false,则为 0;如果为 true,则为 1)。
运算符将应用于结果数字。
~ 运算符查看表达式的二进制表示形式的值,并执行位非运算。
表达式中的任何一位为 1,则结果中的该位变为 0。表达式中的任何一位为 0,则结果中的该位变为 1。
下面的示例阐释了位非 (~) 运算符的用法。
var temp = ~5;
表达式 | 二进制值(2 的补数) | 十进制值 |
---|---|---|
5 | 00000000 00000000 00000000 00000101 | 5 |
~5 | 11111111 11111111 11111111 11111010 | -6 |
可以总结为: ~a = -(a+1)
5.按位左移运算符 <<
左移表达式的位。
var temp
temp = 14 << 2
//变量 temp 的值为 56,因为 14(即二进制的 00001110)左移
//两位等于 56(即二进制的 00111000)
6.按位右移运算符 >>
右移表达式的位,保持符号不变。
var temp
temp = -14 >> 2
//temp 的值为 -4:因为 -14(即二进制的 11110010)右移两位后等于 -4(即二进制的 11111100)。
如果有疑问,参考文章开头 负数在计算机中是怎么存的
7.无符号右移位运算符 >>>
变量值右移表达式值指定的位数,但不保持符号,并将结果赋给该变量。
var temp
temp = -14
temp = temp >>> 2
变量 temp 的初始值为 -14(二进制补码为 11111111 11111111 11111111 11110010)。向右移两位后,该值等于 1073741820(二进制为 00111111 11111111 11111111 11111100)。
怎么换算 00111111 11111111 11111111 11111100 为 十进制,parseInt('00111111 11111111 11111111 11111100',2)
8. 逗号运算符 ,
顺序执行两个表达式。
, 运算符会导致按从左到右的顺序执行表达式。 , 运算符的常见用法是在 for 循环的增量表达式中使用。例如:
j=25;
for (i = 0; i < 10; i++, j++)
{
k = i + j;
}
for 语句只允许在每次通过循环的结尾时执行单个表达式。 , 运算符允许将多个表达式视为单个表达式,因此这两个变量都可以递增。
其实,正常的语句也是可以执行的,比如: console.log(a),alert('1')
9. void 运算符
禁止表达式返回值。
void 运算符计算其表达式,并返回 undefined。 当应计算表达式,但又不希望脚本的其他部分看见其结果时,该运算符很有用。
> [javascript 运算符](https://msdn.microsoft.com/zh-cn/library/ce57k8d5(v=vs.94).aspx)