0

0

JavaScript 位运算符

伊谢尔伦

伊谢尔伦

发布时间:2016-11-22 14:03:48

|

2040人浏览过

|

来源于php中文网

原创

javascript 的位运算符一共有7个,分别是&、|、^、~、>、>>>(c#没有这个运算符,但是c#可以通过>>的逻辑右移来实现此运算),位运算的操作都是通过二进制进行的。

按位与运算符(&)

当两个数相同位都为1时返回1,否则返回0,例如1&2=0,1的二进制表示为0001,2的二进制表示为0010,二者的运算则返回0000。

按位或运算符(|)

当两个数相同位数字不同的时候返回1,否则返回0,例如1|2=3。

立即学习Java免费学习笔记(深入)”;

按位异或运算符(^)

当两个数相同位仅有一个为1的时候返回1,否则返回0,例如1^2=3。

按位非运算符(~)

~是一个一元运算符,它将所有位数取反。这里首先必须要说下负数的存储,负数是以其正数的二进制补码进行存储的,所以我们在进行负数的运算时,必须要正确的获取其二进制编码,也就是其正数的二进制补码。补码是取反然后加1来实现,下面看例子:

先计算3的反码:3的二进制形式为00000011,其反码为11111100,其补码为11111101,所以-3的二进制编码为11111101,那么我们要求~-3,就是取其反码,为00000010,这就是-3的反码,将其转化为十进制为2。

多试几个就会发现,其实一个数的反码就是其十进制的相反数减去1。

左移运算符(

左移运算符就是将数的所有位集体左移,第一位变成第二位,第二位变成第三位。。。空出的新位用0补充。比如1

这里我们可以发现左移运算就是将其十进制数乘以2的位数次方。

闪睿企业网站管理系统一键安装部署版2.0
闪睿企业网站管理系统一键安装部署版2.0

此版本和闪睿企业网站管理系统 2009 SP1 Build 090828 得区别是:这个可以在本地计算机一键安装所有所需组件,并安装完成后自动打开闪睿网站前台。我们的口号:简单,不思考!这个版本要的就是简单!不再需要安装IIS,配置IIS,繁琐的各种设置,下载等,就下载一个包,运行一个程序,一步到位!2.0版本更新日志:1.自主研发迷你web服务器,全自动配置参数。简单无极限!2.迷你服务器和迷你

下载

带符号的右移运算符(>>)

既然左移是乘以2,那么右移肯定应该是除以2了,事实上就是这样子的,如果数字本身为正数,则在高位补0,如果为负数则在高位补1。例如3>>1=1,-3>>1=-2。3的二进制编码表示为0000 0011,将其向右移动1位,得到0000 0001,转换为十进制就是1,-3的二进制编码为1111 1101,将其向右移动1位得到1111 1110,这是一个负数,负数转化为十进制,先减一得到1111 1101,取反为0000 0010,得到-2。

带符号的右移运算就是将其十进制数除以2的位数次方,并舍弃余数。

无符号的右移运算符(>>>)

正数的无符号右移运算结果跟带符号的右移运算是一样的,主要是负数的无符号右移运算。它跟带符号的右移的区别就在于,不管是正数还是负数,高位都以0补充,所以对正数来说带符号和无符号的运算都是一样的,而对于负数来说则是天壤之别。例如:-1>>>1=2147483647,数字很恐怖是吧,看看计算过程:-1的二进制编码为1111 1111 1111 1111 1111 1111 1111 1111,将其右移1位,并补0,得到0111 1111 1111 1111 1111 1111 1111 1111,第一位为0,是正数,将其转化为十进制就是230+229+……+20=230(1-1/231)/(1-1/2)=231-1=2147483647,这样最终得到了我们需要的结果,结果很恐怖,慎用!

位运算符的应用:

谈了这么久,最终的目的还是为了去用这些运算符,看些例子:

颜色的RGB值和十六进制的转换:例如一个颜色值:#33cc10,前两位代表红色(R),中间两位代表绿色(G),后两位代表蓝色(B),将其转化为二进制编码为:0011 0011 1100 1100 0001 0000(赋给color),首先我们要获取红色值,需要将其右移16位,color>>16,也就是0000 0000 0000 0000 0011 0011,这样子我们获取到R=51,那么我们要获取绿色值就需要将其先右移8位,color>>8,得到0000 0000 0011 0011 1100 1100,然后将前八位变为0,0000 0000 0011 0011 1100 1100|0000 0000 0000 0000 1111 1111,得到0000 0000 0000 0000 1100 1100,这样子我们得到G=204,最后取蓝色值,就是简单的将其前八位变为0,color | 0000 0000 0000 0000 0001 0000,我们得到B=16,#33cc10转化为RGB值就是(51,204,16)。反过来RGB转化为十六进制正好是反过来的方法,就是G

判断一个节点是否为另一个节点的父节点:比如有两个节点a和b,ie的方法是a.contains(b)来确定a是否为b的子节点,而其它现代浏览器使用的方法是a.compareDocumentPosition(b),这个返回结果并不是一个boolean值,如果a和b是同一个节点则返回0,a和b在不同的document内或者至少有一个在document之外则返回1,如果b在a之前则返回2,a在b之前则返回4,b包含a则返回8,a包含b则返回16,32则为浏览器独享。0、1、2、4、8、16的二进制编码分别为0000 0000、0000 0001、0000 0010、0000 0100、0000 1000、0001 0000,我们可以通过判断a.compareDocumentPosition(b) & 16转化为boolean是true还是false来判断a是否为b的节点,那么为什么不用a.compareDocumentPosition(b) == 16判断呢?因为a.compareDocumentPosition(b)返回的应该是20(4+ 16),所以倒可以用a.compareDocumentPosition(b) == 20来运算,用&运算符的好处在于我们不需要考虑这些,我们只需要考虑它和我们需要的值16的&运算是否可以返回true。(John Resig有一个模拟compareDocumentPosition的方法,让其在ie下同样适用,有兴趣的可以参考文末的链接~)

按位左移运算:我们知道按位左移1位,就是乘以2,那么我们可以用a

按位右移:一方面,可以用a>>1替代a/2,另外按位右移可以方便的将小数转化为整数,如3.1415>>0=3,因为按位移运算会将运算数必须为整型(详细请参考 ECMA-262 手册),所以操作后将舍弃小数位~

注:位运算符要求它的数字运算数是整型的,并且这些运算数是用32位的整数来表示的,第32位是符号位。而且运算数限制在32位的整数范围内,同时要求右边的运算数在0到31之间。(本文二进制编码并不规范,仅为方便使用~)

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

76

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

73

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号