js位运算符

位运算符

js中位运算符在日常开发需求中其实很少有用到,但是在算法中确实非常有用,特别是涉及到二进制的时候,他能将一个十进制数字转换成另外一个十进制数字,这给我们在一些场景提供了便利,比如base64的算法中,8位二进制取6位再转十进制等 其实大家去看w3c文档,或者翻下书应该都能学习,这里小弟只是简单做个记录,因32位数字太长,故会省去前面的一些位数,大家自行脑补哈~~~~~~~~~~~

常用运算符

  • 位运算 NOT
  • 位运算 AND
  • 位运算 OR
  • 位运算 XOR
  • 左移运算
  • 有符号右移运算

ps:这里少了一个无符号右移运算,是因为这个不太好用,用不好容易出事,小弟目前也没怎么用过,这里就不说了哈~~~~~~~~~~~~

位运算 NOT (~)

该运算符的处理逻辑如下:

1.把运算数转换成 32 位数字 2.把二进制数转换成它的二进制反码 3.把二进制数转换成浮点数

说白了就是取反,0变成1,1变成0

例如: var iNum1 = 25; //25 等于 00000000000000000000000000011001 var iNum2 = ~iNum1; //转换为 11111111111111111111111111100110 alert(iNum2); //输出 “-26”

位运算 AND (&)

该运算符的处理逻辑如下:

1.将两个数字分别转换成二进制 2.两个二进制逐位进行与运算,只有都是1才得到1,其他都是0

例如:25&3

0 0 0 1 1 0 0 1
0 0 0 0 0 0 1 1

得到的结果为

0 0 0 0 0 0 0 1

00000001转成十进制是1,所以25&3得到的结果是1

位运算 OR (|)

该运算符的处理逻辑如下:

1.将两个数字分别转换成二进制 2.两个二进制逐位进行或运算,只有都是0才得到0,其他都是1

例如:25 | 3

0 0 0 1 1 0 0 1
0 0 0 0 0 0 1 1

得到的结果为

0 0 0 1 1 0 1 1

00011011转换成十进制为27,所以25|3得到的记过为27

位运算 XOR (^)

该运算符的处理逻辑如下:

1.将两个数字分别转换成二进制 2.两个二进制逐位进行或运算,只有一个1的时候才返回1,其他都是0

例如:25 | 3

0 0 0 1 1 0 0 1
0 0 0 0 0 0 1 1

得到的结果为

0 0 0 1 1 0 1 0

00011011转换成十进制为26,所以25|3得到的记过为26

左移运算 («)

左移运算由两个小于号表示(«)。它把数字中的所有数位向左移动指定的数量

例如:2«5

0 0 0 0 0 0 0 0 0 0 0 1 0

向左移动5位,右边补0,得到的结果为:

0 0 0 0 0 0 1 0 0 0 0 0 0

1000000转换成十进制为64,所以2«5为64

有符号右移运算 (»)

该运算符把 32 位数字中的所有数位整体右移,同时保留该数的符号(正号或负号)

例如:64»5

0 0 0 0 0 0 1 0 0 0 0 0 0

向左移动5位,右边补0,得到的结果为:

0 0 0 0 0 0 0 0 0 0 0 1 0

10转换成十进制为2,所以64»5为2

本文参考链接:

  • http://www.w3school.com.cn/js/pro_js_operators_bitwise.asp