首页 > 编程语言 >前端必知必会-JavaScript 按位运算

前端必知必会-JavaScript 按位运算

时间:2024-11-24 22:02:46浏览次数:11  
标签:示例 必知 JavaScript 二进制 按位 let 十进制

文章目录


JavaScript 按位运算

运算符名称描述
&AND如果两位均为 1,则将每位设置为 1
|OR如果两位中有一位为 1,则将每位设置为 1
^XOR如果两位中只有一位为 1,则将每位设置为 1
~NOT反转所有位
<<零填充左移通过从右侧推入零来向左移动,并让最左边的位脱落
>>有符号右移通过从左侧推入最左边位的副本来向右移动,并让最右边的位脱落
>>>零填充右移通过从左侧推入零来向右移动,并让最右边的位脱落

示例

操作结果等价于结果
5 & 110101 & 00010001
5 | 1501010001
~ 510~01011010
5 << 1100101 << 11010
5 ^ 140101 ^ 00010100
5 >> 120101 >> 10010
5 >>> 120101 >>>1

JavaScript 使用 32 位按位操作数

JavaScript 将数字存储为 64 位浮点数,但所有按位运算均在 32 位二进制数上执行。

在执行按位运算之前,JavaScript 将数字转换为 32 位有符号整数。

执行按位运算后,结果将转换回 64 位 JavaScript 数字。

上述示例使用 4 位无符号二进制数。因此 ~ 5 返回 10。

由于 JavaScript 使用 32 位有符号整数,因此它不会返回 10。它将返回 -6。

0000000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

有符号整数使用最左边的位作为减号。

JavaScript 按位与

当对一对位执行按位与时,如果两个位都是 1,则返回 1。

一位示例:

操作结果
0 & 00
0 & 10
1 & 00
1 & 11

4 位示例:

操作结果
1111 & 00000000
1111 & 00010001
1111 & 00100010
1111 & 01000100

JavaScript 按位或

当对一对位执行按位或时,如果其中一个位为 1,则返回 1:

一位示例:

操作结果
0 | 00
0 | 11
1 | 01
1 | 11

4 位示例:

操作结果
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

JavaScript 按位异或

当对一对位执行按位异或时,如果位不同,则返回 1:

一位示例:

操作结果
0 ^ 00
0 ^ 11
1 ^ 01
1 ^ 10
4 位示例:
操作结果
--
1111 ^ 00001111
1111 ^ 00011110
1111 ^ 00101101
1111 ^ 01001011

JavaScript 按位与 (&)

只有当两位均为 1 时,按位与才返回 1:

十进制二进制
500000000000000000000000000000000101
100000000000000000000000000000000001
5 & 100000000000000000000000000000001 (1)

示例

let x = 5 & 1;

JavaScript 按位或 (|)

如果其中一位为 1,则按位或返回 1:

十进制二进制
5000000000000000000000000000000101
10000000000000000000000000000001
5 | 1000000000000000000000000000000101 (5)

示例

let x = 5 | 1;

JavaScript 按位异或 (^)

如果位不同,按位异或返回 1:

十进制二进制
5000000000000000000000000000000101
100000000000000000000000000000001
5 ^ 1000000000000000000000000000000100 (4)

示例

let x = 5 ^ 1;

JavaScript 按位非 (~)

十进制二进制
50000000000000000000000000000000101
~5111111111111111111111111111111010 (-6)

示例

let x = ~5;

JavaScript (零填充) 按位左移 (<<)

这是零填充左移。从右侧推入一个或多个零位,最左边的位掉落:

十进制二进制
5000000000000000000000000000000101
5 << 1000000000000000000000000000001010 (10)

示例

let x = 5 << 1;

JavaScript(保留符号)按位右移 (>>)

这是一个保留符号的右移。最左边的位副本从左侧推入,最右边的位脱落:

十进制二进制
-5111111111111111111111111111111011
-5 >> 1111111111111111111111111111111101 (-3)
示例
let x = -5 >> 1;

JavaScript(零填充)右移 (>>>)

这是一个零填充右移。从左侧推入一个或多个零位,最右边的位脱落:

十进制二进制
5000000000000000000000000000000101
5 >>> 100000000000000000000000000000010 (2)

示例

let x = 5 >>> 1;

二进制数

仅设置一位的二进制数很容易理解:

二进制表示法十进制值
00000000000000000000000000000011
000000000000000000000000000000102
00000000000000000000000000001004
00000000000000000000000000010008
000000000000000000000000001000016
0000000000000000000000000010000032
00000000000000000000000000100000064

再设置几个位即可显示二进制模式:

二进制表示十进制值
000000000000000000000000000001015 (4 + 1)
0000000000000000000000000000110113 (8 + 4 + 1)
00000000000000000000000000010110145 (32 + 8 + 4 + 1)

JavaScript 二进制数以二进制补码格式存储。

这意味着负数是数字的按位非加 1:

二进制表示十进制值
00000000000000000000000000000001015
1111111111111111111111111111111011-5
000000000000000000000000000001106
111111111111111111111111111111010-6
00000000000000000000000000010100040
111111111111111111111111111111011000-40

将十进制转换为二进制

示例

function dec2bin(dec){
return (dec >>> 0).toString(2);
}

将二进制转换为十进制
示例

function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}

总结

本文介绍了JavaScript 按位运算的使用,如有问题欢迎私信和评论

标签:示例,必知,JavaScript,二进制,按位,let,十进制
From: https://blog.csdn.net/qq_24018193/article/details/143986792

相关文章

  • 前端必知必会-JavaScript 运算符优先级
    文章目录JavaScript运算符优先级运算符优先级值增量运算符算术运算符移位运算符关系运算符比较运算符按位运算符逻辑运算符条件(三元)运算符赋值运算符总结JavaScript运算符优先级运算符优先级描述算术表达式中执行运算的顺序。乘法(*)和除法(/)的优先级高于......
  • [Javascript] Is Array? Symbol.toStringTag
    Duringthepast,thiswasaworkingsolutionfunctionisArray(obj){returnObject.prototype.toString.call(obj)==='[objectArray]'} Butnowitdoesn'tworkanymore,thereasonisbecauseES6hasabuilt-inSymbol:constobj={[......
  • 【JavaScript】关于对象解构赋值
    概念对象解构赋值是JavaScript中的一种语法特性,它提供了一种简洁的方式来从对象中提取属性值,并将这些值赋给变量。这种方式使得代码在处理对象数据时更加直观和高效,避免了传统的通过对象属性访问(如object.property)来逐个获取和赋值的繁琐过程。对象就像是一个装满各种......
  • 第十章 JavaScript的应用
     JavaScript概述与核心特性深度解析在当今的网页开发领域,HTML和CSS技术构建出了信息丰富且样式美观的网页框架,但在交互性方面却存在明显局限。JavaScript的出现恰好弥补了这一短板,作为一种强大的脚本语言,它为网页注入了灵动的交互性与绚丽的特效,极大地提升了用户体验。......
  • 第十章 JavaScript的课后练习
    1.在网页中显示一个工作中的“数字时钟”。<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>数字时钟</title> <styletype="text/css"> div{ font-size:150px; text-align:center; } .div{......
  • 第十章JavaScript的应用
    10.1JavaScript概述10.1.1JavaScript简介         JavaScript是一种基于对象(Object)和事件驱动(EventDriven)并具有安全性能的脚本语言,能够与HTML(超文本标记语言)、Java语言一起在Web页面中与Web客户交互,它无须经过先将数据传给服务器端(Server)、再传回来的过程,而......
  • HTML学生个人网站作业设计:动漫网站设计——樱桃小丸子(6页) HTML+CSS+JavaScript 简单
    一、......
  • spring框架必知点整理(点到为止非深入篇)
    1.springboot的启动流程springboot的启动流程分两阶段:构造函数,实例化SpringApplication阶段实例化后,调用SpringApplication的run方法阶段 启动流程@SpringBootApplicationpublicclassMySpringBootWebApplication{publicstaticvoidmain(String[]args)......
  • 一个基于原生 JavaScript 的简约消息提示插件,非常轻量,不依赖于任何第三方库或框架,使其
    在现代的Web开发中,提供良好的用户反馈是至关重要的。消息提示是其中一种最常见的方式之一,它可以用来向用户传达重要信息、警告或成功状态。然而,为了简化开发者的工作并提供一种轻量级、易于集成的解决方案,Dream-Msg应运而生。Dream-Msg是一个基于原生JavaScript的简约......
  • JavaScript基础简介
    内嵌内嵌JS指的是将JavaScript代码直接写在HTML文件的<script>标签中,通常放在<head>或<body>标签内。这种方式使得JavaScript代码与HTML结构紧密联系在一起,便于在单个HTML文件中进行简单的交互和动态效果实现。代码:效果:外嵌外嵌JS指的是将JavaScript代码写在独立的.js文......