位置: IT常识 - 正文

JS中的位运算(js位运算有什么用)

编辑:rootadmin
JS中的位运算

目录

JS中的位运算

JS中的与运算

JS中的或运算

JS中的否(非)运算

计算机中负数的存储方式

JS中的异或运算

JS中位运算的应用场景

位的叠加(开关)

JS中的位移运算

左位移

右位移

全右位移


推荐整理分享JS中的位运算(js位运算有什么用),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js按位或,js中的位运算符,js按位或,js数字位数,js 位运算,js 位运算,js位操作,js 位运算,内容如对您有帮助,希望把文章链接给更多的朋友!

首先了解一下什么是位运算

位运算:从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

上面的话可以简化为:将一个整数的二进制格式进行运算

那么在JS中是如何进行位运算的呢?

JS中的位运算

在JS中,如果需要对一个数据,类似于加减乘除,它会首先将其转换为一个整数,并且按照32位的整数二进制排列

举个例子:小数2.3

2.3 -> 2 -> 0000 0000 0000 0000 0000 0010 //第一个0表示符号位,1为负数,0为正数

首先把2.3四舍五入成一个整数2,然后将这个整数转换成32位二进制整数格式,所以对于JS中的位运算,需要全部转换成整数格式,在进行运算

那么对于一些特殊的数字,比如NaN、infinity、-infinity是怎么表示的呢

在JS中规定。对于特殊的以上数字,如果进行位运算,全部看作0

JS中的与运算

在js中位运算有多种,先介绍第一种与运算,符号为:&,写法为:表达式1 & 表达式2

那么与运算是怎么计算的呢?

与运算:参加运算的两个数据,按二进制位进行“与”运算

上面的话通俗来讲:两位同时为“1”,结果才为“1”,否则为0,就是将两个整数的每一个二进制位进行比较,如果都为1,结果才为1,其余情况全部为0;

举个例子 : 1 & 2

1 & 21 对应的二进制是--0000 0000 0000 0000 0000 0000 0000 00012 对应的二进制是--0000 0000 0000 0000 0000 0000 0000 0010由于前28位都为0,结果与运算后肯定也全为0,这时就算后四位- 0 0 0 1 -- 0 0 1 0 ------------- 0 0 0 0 - //结果为0000,转换为十进制为0,那么1 & 2的结果就为0JS中的或运算

在js中的第二种位运算是或运算,符号 | ,写法:表达式1 | 表达式2

那么或运算是如何计算的呢?

或运算:将比较的两个整数,先转换为32位二进制,然后每一位进行比较,全0才为0,其余情况全为1

举个例子 : 1 | 3

1 | 31 对应的二进制是--0000 0000 0000 0000 0000 0000 0000 00013 对应的二进制是--0000 0000 0000 0000 0000 0000 0000 0011由于前30位全为0,与运算后也全为0,可以不计入计算- 0 1 -- 1 1 --------- 1 1 - //二进制11,需要补齐32位才可以转换为十进制,那么1 | 3的结果就为3JS中的否(非)运算

在js中,还有一中运算,称为否或者非运算,符号为:~,写法:~表达式

否运算:将这个整数全部二进制位按位取反,0变成1,1变成0

在这里首先带大家了解一下知识

计算机中负数的存储方式

可能某些同学认识二进制会认为负数-1在计算机是这样存储的

-1> 1000 0000 0000 0000 0000 0000 0000 0001 //符号位为-表示负数,最后一位为1,表示1

感觉上-1好像是这样存储的,但其实计算机并不是这样存储的,这样的表示方法叫做真码,对于人来说,这样确实很任意让人阅读,对于为什么计算机会这样存储,这与计算机组成原理有关,计算机是不能做减法的,只能做加法的,这里并不多讲

那么计算机到底是如何存储负数的呢?

首先计算机拿出负数的真码,符号位不动,其余位全部取反,取反的叫反码,然后将反码加上1就可以得到负数的补码,在计算机中负数就是存储的补码

如果还不懂的话,请看我举个例子:如   -1

-1拿出真码 --> 1000 0000 0000 0000 0000 0000 0000 0001 // 也叫原码得到反码 --> 1111 1111 1111 1111 1111 1111 1111 1110 // 真码取反得到补码 --> 1111 1111 1111 1111 1111 1111 1111 1111 // 反码加1

由上述方法,那么-1在计算机存储的就是补码:1111 1111 1111 1111 1111 1111 1111 1111

注意:以上方法只针对负数存储,正数在计算机中,原反补码相同

通过上述问题你是否知道 ~1等于多少,如果还不懂,请听我慢慢讲

~11 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 0001~1 对1的二进制序列进行取反 --> 1111 1111 1111 1111 1111 1111 1111 1110这是得到的是存储在计算机中的补码,需要转换成真码,然后才能传换成十进制> 取出补码 --> 1111 1111 1111 1111 1111 1111 1111 1110> 得到反码 --> 1111 1111 1111 1111 1111 1111 1111 1101 //补码-1就得到反码> 得到真码 --> 1000 0000 0000 0000 0000 0000 0000 0010 //符号位不变,其余全部取反,得到真码> 转换成十进制 ----得到-2--所以 ~1 的结果为 -2

以上方法确实可以得出非运算结果,但看起来繁琐复杂,这里小编给大家介绍一个简单的使用方法,面试笔试,考试快速得出结果

~x:-x - 1    // 取反某个数字,先让这个数字变成负数,然后减去1,就得到非运算结果

JS中的位运算(js位运算有什么用)

举个例子  ~2和~-2

~2 = -2 - 1 = -3~-2 = 2 - 1 = 1

以上方法,非常好用

顺便给大家介绍一种JS中最快速取整的方式,就是小数取整数,符号:~~,写法:~~小数

举个例子 

~~3.1415926> 首先对3.1415926进行非运算 --> ~3.1415926 -->取出整数部分3,结果为-4> 然后再对-4进行非运算 --> ~-4 --> 结果为3

但小编并不介意使用这种方法,不太容易阅读,可以拿来炫炫技巧

JS中的异或运算

再给大家介绍一种位运算:异或运算,符号:^ ,写法:数字1 ^ 数字2

异或运算:将数字1和数字2按32位二进制进行比较,不同为1,相同为0

举个例子  1 ^ 2

1 ^ 21 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 00012 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 0010由于前30位相比较全部为0,这里就比较后两位-- 0 1 ---- 1 0 ------------- 1 1 -- // 二进制补齐32位,转换成十进制后,结果为3

炫技的时刻又到啦!!!

如果面试官问你交换变量的方法,你能写出来几种

小编给大家带来下面几种方法

let a = 1,b = 2;//方式一let temp = a;a = b;b = temp;console.log(a,b) //输出2 1//方式二a = a + b;b = a - b;a = a - b;console.log(a,b) //输出2 1//方式三a = a ^ b;b = a ^ b;a = a ^ b;console.log(a,b) //输出2 1

介绍完JS中的位运算,相信大家都不陌生了,那么位运算到底应用于JS中的那些场景呢?

JS中位运算的应用场景

这里小编给带来,js中位运算的常见场景

位的叠加(开关)

举个例子

//管理所有权限let AllPermission = { read:0b001, //读权限 write:0b010, //修改权限 create:0b100, //创建权限}//权限1表示可读可写let permission1 = AllPermission.read | AllPermission.write//判断权限:权限1中是否有可读权限permission1 & AllPermission === AllPermission ? console.log("可读") : console.log("不可读") //输出可读JS中的位移运算

接下来给大家介绍一下js中的位移运算,包含左位移和右位移

左位移

符号:<<

写法:数字1  <<  数字2

左位移:将数字1的二进制位(除符号外),左位移数字2的次数

举个例子:  3  <<  1

3 << 13 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 0011左移一位后是 --> 0000 0000 0000 0000 0000 0000 0000 0110左移运算,是整个32位向左移动,最后移动多少位,后面补多少0所以3 << 1 的结果为 0110 ,转换为十进制为6

 由上面可以得出左移运算的规律:数字1 乘以 2的数字2次方

3 << 1 = 3 * 2 ^ 1 = 6

右位移

符号: >> 

写法:数字1  >> 数字2

右位移:将数字1的二进制位(除符号外),右位移数字2的次数

注意!!!!!------->右位移有可能会丢失精度,请谨慎使用

举个例子   3 >> 1

3 >> 13 对应的二进制是 --> 0000 0000 0000 0000 0000 0000 0000 0011右移一位后是 --> 0000 0000 0000 0000 0000 0000 0000 0001右移运算,是整个32位向右移动,最后移动多少位,符号位不变,前面补多少0所以3 >> 1 的结果为 0001 ,转换为十进制为1

求右位移的快速方法:

举个例子  5 >> 1

相当于 5 / 2^1 ,然后取整数部分,结果为2

全右位移

符号:>>>

写法:同右位移

全右位移:同右位移,区别在于,符号位会跟着移动

举个例子  -1 >>> 1

-1 >>> 1-1 对应的二进制是 --> 1111 1111 1111 1111 1111 1111 1111 1110全右移后是 --> 0111 1111 1111 1111 1111 1111 1111 1111所以-1 >>> 1 的结果为 0111 1111 1111 1111 1111 1111 1111 1111 ,转换为十进制为2147483647

好啦,今天的JS位运算已经全部介绍完毕,你学会了吗

本文链接地址:https://www.jiuchutong.com/zhishi/298835.html 转载请保留说明!

上一篇:感知机算法之Python代码实现(感知机算法python)

下一篇:vue项目打断点的三种方式(vue怎么打断点)

  • 快手怎么设置儿童模式(快手怎么设置儿童不能看的)

    快手怎么设置儿童模式(快手怎么设置儿童不能看的)

  • qq改马甲什么意思(qq里面的改马甲是什么意思?)

    qq改马甲什么意思(qq里面的改马甲是什么意思?)

  • 天猫超市生鲜怎么没了(天猫超市生鲜去哪了)

    天猫超市生鲜怎么没了(天猫超市生鲜去哪了)

  • ppt怎么移动幻灯片(ppt怎么移动幻灯片文字到另一张幻灯片)

    ppt怎么移动幻灯片(ppt怎么移动幻灯片文字到另一张幻灯片)

  • iphone11如何设置相册锁(iphone11如何设置电量显示)

    iphone11如何设置相册锁(iphone11如何设置电量显示)

  • cad找不到指定的图形文件(cad找不到指定的图形文件改不了)

    cad找不到指定的图形文件(cad找不到指定的图形文件改不了)

  • 安卓微信有HD版本吗(微信hd apk)

    安卓微信有HD版本吗(微信hd apk)

  • hd开着有什么影响(hd开了有什么坏处)

    hd开着有什么影响(hd开了有什么坏处)

  • qq显示该群不存在或已退出(qq群显示不存在但还是有显示信息)

    qq显示该群不存在或已退出(qq群显示不存在但还是有显示信息)

  • 充电仓坏了怎么给耳机充电(充电仓坏了怎么办)

    充电仓坏了怎么给耳机充电(充电仓坏了怎么办)

  • 无线网络连接上但上不了网闪红灯(无线网络连接上但上不了网怎么回事)

    无线网络连接上但上不了网闪红灯(无线网络连接上但上不了网怎么回事)

  • 抖音绑定不了qq什么原因(抖音绑定不了qq怎么办)

    抖音绑定不了qq什么原因(抖音绑定不了qq怎么办)

  • 计算机按性能可以分为哪几类(计算机按性能可以分为五大类)

    计算机按性能可以分为哪几类(计算机按性能可以分为五大类)

  • 手机截图怎么加红色框(手机截图怎么加边框)

    手机截图怎么加红色框(手机截图怎么加边框)

  • mt6735相当于骁龙哪款(mt6735相当于骁龙什么水平)

    mt6735相当于骁龙哪款(mt6735相当于骁龙什么水平)

  • 平板微信下载解析包出错是什么原因(平板手机微信下载)

    平板微信下载解析包出错是什么原因(平板手机微信下载)

  • 11小白点怎么设置(小白点怎么设置锁屏)

    11小白点怎么设置(小白点怎么设置锁屏)

  • 小米手表可以聊微信吗(小米手表可以聊QQ吗)

    小米手表可以聊微信吗(小米手表可以聊QQ吗)

  • 双十一没发货如何投诉(双十一未发货能退款么)

    双十一没发货如何投诉(双十一未发货能退款么)

  • win10杀毒软件怎么关闭(win10 杀毒软件)

    win10杀毒软件怎么关闭(win10 杀毒软件)

  • 微信地址定位怎么添加(微信地址定位怎么设置)

    微信地址定位怎么添加(微信地址定位怎么设置)

  • 怎么关闭苹果手机定位追踪(怎么关闭苹果手机共享功能)

    怎么关闭苹果手机定位追踪(怎么关闭苹果手机共享功能)

  • 金立m6故事锁屏怎么取消(金立m6怎样关闭故事锁屏)

    金立m6故事锁屏怎么取消(金立m6怎样关闭故事锁屏)

  • 华为mate20pro是5g手机吗(华为mate20pro支持5g)

    华为mate20pro是5g手机吗(华为mate20pro支持5g)

  • 手机镀膜可以去除吗(手机镀膜可以去油膜吗)

    手机镀膜可以去除吗(手机镀膜可以去油膜吗)

  • 怎么显示手机电量百分比(怎么显示手机电话号码)

    怎么显示手机电量百分比(怎么显示手机电话号码)

  • 华为p30翻译功能(华为p30翻译功能怎么开启)

    华为p30翻译功能(华为p30翻译功能怎么开启)

  • 如何连接airpods2(如何连接AirPlay)

    如何连接airpods2(如何连接AirPlay)

  • 怎么把音频文件转为高音质清晰版的(怎么把音频文件放到录音里)

    怎么把音频文件转为高音质清晰版的(怎么把音频文件放到录音里)

  • Win11如何安装中文语言包?Windows11安装中文语言包方法(win11中文安装包)

    Win11如何安装中文语言包?Windows11安装中文语言包方法(win11中文安装包)

  • 金税四期监控个人在银行的存款吗
  • 职业年金单位缴费方式
  • 会计中罚款属于什么处理
  • 银行存款利息的计算
  • 个人负担社保
  • 支付平台使用费怎么算
  • 资产资本化的借款费用如何写分录?
  • 固定资产发票未到怎么提折旧
  • 抵押担保查询
  • 账本印花税如何申报缴纳
  • 个人建筑安装如何交税
  • 小规模纳税人装修费用计入什么科目
  • 三代手续费入账
  • 发票对方已认证怎么冲红
  • 企业无偿借款要缴税吗
  • 一般纳税人进货收到普票怎么做账
  • 当月的销项税额要转入哪里
  • 鸿蒙系统怎么切换回安卓
  • 劳务公司开发票,劳务公司怎么转取收入
  • 苹果手机怎么修改默认输入法
  • linux系统的
  • 预缴增值税会产生滞纳金吗
  • 物流公司的收入怎么记账
  • php做
  • 公司出租房屋租赁发票税率
  • 混合筹资的定义
  • vue项目难点及解决方法
  • 财政资金借款给企业
  • 设计资质承担范围
  • 永续债进什么科目
  • thinkphp批量导入数据
  • 什么是前后端分离的方式
  • 呕心沥血的历史人物
  • vue修饰词
  • 一般纳税人开发票给小规模纳税人
  • 进口关税增值税如何做账
  • 销售服饰
  • 税控系统维护费抵扣申报表怎么填
  • 工资薪金可以抵扣增值税吗
  • 业务招待费的列支范围
  • 应付职工薪酬和生产成本的区别
  • 废旧物资处理的税金
  • 接受非货币性资产投资入账价值
  • 小规模纳税人缴纳增值税怎么做账
  • 制造费用怎么写
  • 资产已报废折旧怎么算
  • 公司二手车销售
  • 建筑业增值税会退税吗
  • 代缴社保会计分录
  • 母子公司合并报表实操
  • MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的原因分解决办法
  • sql中出现将截断字符串或二进制
  • mysql数据库设置固定值
  • u盘如何安装win7系统
  • 苹果电脑怎么截屏按哪个键
  • centos which
  • directx?
  • 红石使用基础教学
  • centos开启后一直黑屏
  • 如何改变linux终端界面的颜色
  • win7旗舰版重装系统教程
  • 怎么用javascript
  • 记住密码自动登录 会更新登陆信息吗
  • perl 调用perl
  • cocos设置中文
  • jquery easyui 教程
  • docker save -o
  • javascript入门经典
  • android调用相机闪退
  • js的a标签
  • jQuery中ajax的load()与post()方法实例详解
  • javascript教程完整版
  • unity data
  • javascript总结笔记
  • 你知道什么是布
  • jquery点击按钮左右滚动效果
  • flask框架数据可视化
  • 贵州新农合可以打电话停保吗
  • 北京税务局待遇有住宿吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设