首页 > 编程语言 > 详细

JavaScript-运算符

时间:2015-09-25 14:39:26      阅读:211      评论:0      收藏:0      [点我收藏+]

1. 按位非( NOT
按位非操作符由一个波浪线( ~)表示,执行按位非的结果就是返回数值的反码。按位非是
ECMAScript 操作符中少数几个与二进制计算有关的操作符之一。下面看一个例子:
var num1 = 25; // 二进制 00000000000000000000000000011001
var num2 = ~num1; // 二进制 11111111111111111111111111100110
alert(num2); // -26

这里,对 25 执行按位非操作,结果得到了26。这也验证了按位非操作的本质:操作数的负值减 1
因此,下面的代码也能得到相同的结果:
var num1 = 25;
var num2 = -num1 - 1;
alert(num2); // "-26"
虽然以上代码也能返回同样的结果,但由于按位非是在数值表示的最底层执行操作,因此速度更快。
2. 按位与( AND
按位与操作符由一个和号字符( &)表示,它有两个操作符数。从本质上讲,按位与操作就是将两
个数值的每一位对齐,然后根据下表中的规则,对相同位置上的两个数执行 AND 操作:

按位与操作只在两个数值的对应位都是 1 时才返回 1,任何一位是 0,结果都是 0
下面看一个对 25 3 执行按位与操作的例子:
var result = 25 & 3;
alert(result); //1

可见,对 25 3 执行按位与操作的结果是 1。为什么呢?请看其底层操作:
25 = 0000 0000 0000 0000 0000 0000 0001 1001
3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
AND = 0000 0000 0000 0000 0000 0000 0000 0001
原来, 25 3 的二进制码对应位上只有一位同时是 1,而其他位的结果自然都是 0,因此最终结果
等于 1

3. 按位或( OR
按位或操作符由一个竖线符号( |)表示,同样也有两个操作数。按位或操作遵循下面这个真值表。
第一个数值的位 第二个数值的位 结 果
1 1 1
1 0 1
0 1 1
0 0 0
由此可见,按位或操作在有一个位是 1 的情况下就返回 1, 而只有在两个位都是 0 的情况下才返回 0
如果在前面按位与的例子中对 25 3 执行按位或操作,则代码如下所示:
var result = 25 | 3;
alert(result); //27
42 3 章 基本概念
25 3 按位或的结果是 27
25 = 0000 0000 0000 0000 0000 0000 0001 1001
3 = 0000 0000 0000 0000 0000 0000 0000 0011
--------------------------------------------
OR = 0000 0000 0000 0000 0000 0000 0001 1011
这两个数值的都包含 4 1,因此可以把每个 1 直接放到结果中。二进制码 11011 等于十进制值 27

4. 按位异或( XOR
按位异或操作符由一个插入符号( ^)表示,也有两个操作数。以下是按位异或的真值表。
第一个数值的位 第二个数值的位 结 果
1 1 0
1 0 1
0 1 1
0 0 0
按位异或与按位或的不同之处在于,这个操作在两个数值对应位上只有一个 1 时才返回 1,如果对
应的两位都是 1 或都是 0,则返回 0
25 3 执行按位异或操作的代码如下所示:
var result = 25 ^ 3;
alert(result); //26

25 3 按位异或的结果是 26,其底层操作如下所示:
25 = 0000 0000 0000 0000 0000 0000 0001 1001
3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
XOR= 0000 0000 0000 0000 0000 0000 0001 1010
这两个数值都包含 4 1,但第一位上则都是 1,因此结果的第一位变成了 0。而其他位上的 1 在另
一个数值中都没有对应的 1 ,可以直接放到结果中。二进制码 11010 等于十进制值 26(注意这个结果比
执行按位或时小 1)。


5. 左移
左移操作符由两个小于号( <<)表示,这个操作符会将数值的所有位向左移动指定的位数。例如,
如果将数值 2(二进制码为 10)向左移动 5 位,结果就是 64(二进制码为 1000000),代码如下所示:
var oldValue = 2; // 等于二进制的 10
var newValue = oldValue << 5; // 等于二进制的 1000000,十进制的 64

注意,在向左移位后,原数值的右侧多出了 5 个空位。左移操作会以 0 来填充这些空位,以便得到
的结果是一个完整的 32 位二进制数

注意,左移不会影响操作数的符号位。换句话说,如果将2 向左移动 5 位,结果将是64,而非 64

6. 有符号的右移
有符号的右移操作符由两个大于号( >>)表示,这个操作符会将数值向右移动,但保留符号位(即
正负号标记)。有符号的右移操作与左移操作恰好相反,即如果将 64 向右移动 5 位,结果将变回 2
var oldValue = 64; // 等于二进制的 1000000
var newValue = oldValue >> 5; // 等于二进制的 10 ,即十进制的 2

同样,在移位过程中,原数值中也会出现空位。只不过这次的空位出现在原数值的左侧、符号位的
右侧(见图 3-3)。而此时 ECMAScript 会用符号位的值来填充所有空位,以便得到一个完整的值。

本文出自 “9196441” 博客,请务必保留此出处http://9206441.blog.51cto.com/9196441/1698144

JavaScript-运算符

原文:http://9206441.blog.51cto.com/9196441/1698144

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!