1.二进制或运算符(or):符号为 |

逐位比较两个运算子,两个二进制位之中只要有一个为1,就返回1,否则返回0。

0 | 3 // 3

上面代码中,0和3的二进制形式分别是00和11,所以进行二进制或运算会得到11(即3)。

注意位运算只对整数有效,遇到小数时,会将小数部分舍去,只保留整数部分,并且这种取整方法不 适用超过32位整数最大值2147483647的数。

2.二进制与运算符(and):符号为&

逐位比较两个运算子,两个二进制位之中只要有一个位为0,就返回0,否则返回1。

0 & 3 // 0

上面代码中,0(二进制00)和3(二进制11)进行二进制与运算会得到00(即0)。

3.二进制否运算符(not):符号为~

将每个二进制位都变为相反值(0变为1,1变为0)

~ 3 // -4

大家一定很疑惑上面的结果怎么得来的呢?因为JavaScriptt 内部将所有的运算子都转为32位的二进制整数再进行运算。

运算过程如下:

3的32位整数形式是00000000000000000000000000000011,二进制否运算以后得到11111111111111111111111111111100。由于第一位(符号位)是1,所以这个数是一个负数。JavaScript
内部采用补码形式表示负数,即需要将这个数减去1,再取一次反,然后加上负号,才能得到这个负数对应的10进制值。这个数减去1等于11111111111111111111111111111011,再取一次反得到00000000000000000000000000000100,再加上负号就是-4。

考虑到这样的过程比较麻烦,可以简单记忆成,一个数与自身的取反值相加,等于-1
即3取反等于-4,3与-4相加得-1

~ -3 // 2

4.异或运算符(xor):符号为^

两个二进制位不同时返回1,相同时返回0。

0 ^ 3 // 3

上面表达式中,0(二进制00)与3(二进制11)进行异或运算,它们每一个二进制位都不同,所以得到11(即3)。

5.左移运算符(left shift):符号为<<

将一个数的二进制值向左移动指定的位数,尾部补0,即乘以2的指定次方。向左移动的时候,最高位的符号位是一起移动的。

// 4 的二进制形式为100,
// 左移一位为1000(即十进制的8)
// 相当于乘以2的1次方
4 << 1
// 8-4 << 1
// -8

上面代码中,-4左移一位得到-8,是因为-4的二进制形式是11111111111111111111111111111100,左移一位后得到11111111111111111111111111111000,该数转为十进制(减去1后取反,再加上负号)即为-8。

6.右移运算符(right shift):符号为>>

将一个数的二进制值向右移动指定的位数。如果是正数,头部全部补0;如果是负数,头部全部补1。右移运算符基本上相当于除以2的指定次方(最高位即符号位参与移动)。

4 >> 1  // 2
/*
// 因为4的二进制形式为 00000000000000000000000000000100,
// 右移一位得到 00000000000000000000000000000010,
// 即为十进制的2
*/-4 >> 1  // -2
/*
// 因为-4的二进制形式为 11111111111111111111111111111100,
// 右移一位,头部补1,得到 11111111111111111111111111111110,
// 即为十进制的-2
*/

为了便于计算左移运算符相当于乘2,右移运算符相当于除2

7.头部补零的右移运算符(zero filled right shift):符号为>>>

头部补零的右移运算符(>>>)与右移运算符(>>)只有一个差别,就是一个数的二进制形式向右移动时,头部一律补零,而不考虑符号位.。所以,该运算总是得到正值。对于正数,该运算的结果与右移运算符(>>)完全一致,区别主要在于负数。

4 >>> 1
// 2-4 >>> 1  // 2147483646
/*
// 因为-4的二进制形式为11111111111111111111111111111100,
// 带符号位的右移一位,得到01111111111111111111111111111110,
// 即为十进制的2147483646。
*/

JS中或﹑与﹑否﹑异或﹑左移﹑右移﹑头尾补零的右移运算符相关推荐

  1. matlab ifft频率分辨率,[FFT] matlab中关于FFT的使用(理解频率分辨率、补零问题)

    [FFT] matlab中关于FFT的使用(理解频率分辨率.补零问题).txt我这人从不记仇,一般有 仇当场我就报了.没什么事不要找我,有事更不用找我!就算是believe中间也藏了一个lie! 我那 ...

  2. c语言左边自动补零,c语言左移4,余位补零 时不时乘以16?

    c语言左移4,余位补零 时不时乘以16?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言左移4,余位补零 时不时乘 ...

  3. matlab cftool光滑曲线导出为什么就不光滑了_快速傅里叶变换(FFT)中为什么要“补零”?...

    为了大家能够复现各个图中的结果,我附上了所有我编写的MATLAB代码. 创作不易,未经允许,禁止转载. 另外,说明一下,用MATLAB做FFT并不要求数据点个数必须为以2为基数的整数次方.之所以很多资 ...

  4. JS中的位操作符:“与,或,非,异或,左移,右移”

    Javascript有算数操作符,赋值操作符,比较操作符,逻辑操作符,同时也有位操作符. 引子 先想一想,如下,该输出什么答案? console.log('5 & 1 :', ( 5 & ...

  5. 这些 JS 中强大的操作符,总有几个你没听说过

    大家好,我是若川.今天推荐一篇相对简单些的文章. 大家应该都知道了我最近组织了源码共读活动, 有小伙伴表示读源码上瘾,也很有收获.工作0-5年都可以参与.感兴趣可以加我微信 ruochuan12 私信 ...

  6. 深入探讨JS中的数组排序函数sort()和reverse()

    最近在研究Javascript发现了其中一些比较灵异的事情.有点让人感到无语比如: alert(typeof( NaN == NaN));//结果为假. alert(typeof( NaN != Na ...

  7. js中innerHTML和innerText jQuery中html()和text()的区别

    js中innerHTML和innerText的区别 innerHTML innerHTML  会将标签和标签中的内容否获取回来 innerHTML  .innerHTML = '<p>&l ...

  8. JS中关于异步的那点事~

    Table of contents 前言 同步与异步 同步 异步 callback 多重嵌套 promise 异步(async)函数 参考资料 前言 JS 中最基础的异步调用方式是 callback, ...

  9. js中~~和^=分别代表什么,用处是什么?

    先看个栗子: ~~false === 0 ~~true === 1 ~~undefined === 0 ~~!undefined === 1 ~~null === 0 ~~!null === 1 ~~ ...

最新文章

  1. Quartz.net 定时任务矿建Demo
  2. 我的工作日志 2020年12月1日 星期一
  3. c primer英文版第5版_2019足坛10大巨星:梅西第2范戴克第3,C罗第5
  4. 信息学奥赛一本通(1019:浮点数向零舍入)
  5. python爬app_Python爬虫抓取手机APP的传输数据
  6. 开放273项AI能力,创建34万模型,汇聚265万开发者,百度大脑的2020成果一览
  7. 在windows上搭建redis集群(Redis-Sentinel)
  8. 全国计算机一级12月考试答案,12月到12月全国高校计算机等级考试(广西考区)一级笔试真题及答案...
  9. 企业管理软件解决方案 出售 :针对华东区中小企业订单仓储管理流程
  10. JAVASSM框架面试题
  11. 《软件质量保证与测试》读书笔记(一)
  12. ANSYS Workbench流-热-固多场耦合计算方法详解
  13. 【详细】小程序模板使用教程
  14. C++洛谷题解(24)——P1422
  15. mysql insert on duplicate_一条Insert on duplicate引发的血案
  16. linux中etc目录的作用,/etc 目录的作用到底是干什么用的?
  17. 如何设置背景图片的大小?
  18. 如何提高思维能力(不止针对程序猿)
  19. 布局文件之间含有相同的id的控件
  20. 微信小程序5——小程序网络数据请求

热门文章

  1. Latent SVM
  2. ETL工程师、数据挖掘工程师
  3. Verilog语法学习-有限状态机(FSM)
  4. 飞利浦家居照明发布《2020-2021家居灯具和家装风格指南》
  5. 突然发现得考个研究生了。。
  6. win10 没有ipv6地址 网关设置
  7. ppt怎么把图片做成翻书效果_PPT教程,教你如何制作翻书效果动画
  8. 主成分分析法(PCA)的理解(附python代码案例)
  9. [蓝桥杯 2022 省 B] 砍竹子
  10. 几种方法快速地将pdf中的某一页删除