最适合网络开发者的网站

JS 教程

JS 首页 JS 简介 JS 去哪儿 JS 输出 JS 语句 JS 语法 JS 评论 JS 变量 JS 让 JS 常量 JS 运算符 JS 算术 JS 作业 JS 数据类型 JS 函数 JS 对象 JS 活动 JS 字符串 JS 字符串方法 JS 字符串搜索 JS 字符串模板 JS 数字 JS 数字方法 JS 数组 JS 数组方法 JS 数组排序 JS 数组迭代 JS 数组常量 JS 日期 JS 日期格式 JS 获取日期方法 JS 日期设置方法 JS 数学 JS 随机 JS 布尔值 JS 比较 JS 如果否则 JS 开关 JS 循环 JS 循环 JS 循环 JS 循环 JS 中断 JS 可迭代对象 JS 集 JS 地图 JS Typeof JS 类型转换 JS 按位 JS 正则表达式 JS 错误 JS 作用域 JS 提升 JS 严格模式 JS this 关键字 JS 箭头函数 JS 类 JS 模块 JS JSON JS 调试 JS 风格指南 JS 最佳实践 JS 错误 JS 性能 JS 保留字

JS 版本

JS 版本 JS 2009(ES5) JS 2015(ES6) 小学 2016 小学 2017 小学 2018 JS IE/Edge JS 历史

JS 对象

对象定义 对象属性 对象方法 对象显示 对象访问器 对象构造函数 对象原型 对象可迭代对象 对象集 对象映射 对象引用

JS 函数

函数定义 函数参数 函数调用 函数调用 功能应用 函数绑定 函数闭包

JS 类

课程简介 类继承 静态类

JS 异步

JS 回调 JS 异步 JS 承诺 JS 异步/等待

JS HTML DOM

DOM 简介 DOM 方法 DOM 文档 DOM 元素 DOM HTML DOM 表单 DOM CSS DOM 动画 DOM 事件 DOM 事件监听器 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS 浏览器 BOM

JS 窗口 JS 屏幕 JS 位置 JS 历史 JS 导航器 JS 弹出警告 JS 时机 JS Cookies

JS Web API

Web API 简介 Web 表单 API 网络历史记录 API Web 存储 API Web Worker API Web 获取 API 网络地理定位 API

JS AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用程序 AJAX 示例

JS JSON

JSON 简介 JSON 语法 JSON 与 XML JSON 数据类型 JSON 解析 JSON 字符串化 JSON 对象 JSON 数组 JSON 服务器 JSON 格式的 PHP JSON 的 HTML JSON JSONP

JS 与 jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS 图形

JS 图形 JS 画布 JS Plotly JS Chart.js JS 谷歌图表 JS D3.js

JS 示例

JS 示例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS 浏览器 JS 编辑器 JS 练习 JS 测验 JS 证书

JS 参考

JavaScript 对象 HTML DOM 对象

JavaScript。W3Schools 英文版。初学者课程

尿素

JavaScript Bitwise Operations


JavaScript Bitwise Operators

Operator Name Description
& AND Sets each bit to 1 if both bits are 1
| OR Sets each bit to 1 if one of two bits is 1
^ XOR Sets each bit to 1 if only one of two bits is 1
~ NOT Inverts all the bits
<< Zero fill left shift Shifts left by pushing zeros in from the right and let the leftmost bits fall off
>> Signed right shift Shifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off
>>> Zero fill right shift Shifts right by pushing zeros in from the left, and let the rightmost bits fall off

Examples

Operation Result Same as Result
5 & 1 1 0101 & 0001  0001
5 | 1 5 0101 | 0001  0101
~ 5 10  ~0101  1010
5 << 1 10 0101 << 1  1010
5 ^ 1 4 0101 ^ 0001  0100
5 >> 1 2 0101 >> 1  0010
5 >>> 1 2 0101 >>> 1  0010

JavaScript Uses 32 bits Bitwise Operands

JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.

Before a bitwise operation is performed, JavaScript converts numbers to 32 bits signed integers.

After the bitwise operation is performed, the result is converted back to 64 bits JavaScript numbers.

The examples above uses 4 bits unsigned binary numbers. Because of this ~ 5 returns 10.

Since JavaScript uses 32 bits signed integers, it will not return 10. It will return -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

A signed integer uses the leftmost bit as the minus sign.


Bitwise AND

When a bitwise AND is performed on a pair of bits, it returns 1 if both bits are 1.

One bit example:
OperationResult
0 & 00
0 & 10
1 & 00
1 & 11
4 bits example:
OperationResult
1111 & 00000000
1111 & 00010001
1111 & 00100010
1111 & 01000100

Bitwise OR

When a bitwise OR is performed on a pair of bits, it returns 1 if one of the bits are 1:

One bit example:
OperationResult
0 | 00
0 | 1
1 | 01
1 | 11
4 bits example:
OperationResult
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

Bitwise XOR

When a bitwise XOR is performed on a pair of bits, it returns 1 if the bits are different:

One bit example:
OperationResult
0 ^ 00
0 ^ 1
1 ^ 01
1 ^ 1
4 bits example:
OperationResult
1111 ^ 00001111
1111 ^ 00011110
1111 ^ 00101101
1111 ^ 01001011

JavaScript Bitwise AND (&)

Bitwise AND returns 1 only if both bits are 1:

DecimalBinary
500000000000000000000000000000101
100000000000000000000000000000001
5 & 100000000000000000000000000000001 (1)

例子

let x = 5 & 1;
亲自尝试 »

JavaScript Bitwise OR (|)

Bitwise OR returns 1 if one of the bits are 1:

DecimalBinary
500000000000000000000000000000101
100000000000000000000000000000001
5 | 100000000000000000000000000000101 (5)

例子

let x = 5 | 1;
亲自尝试 »

JavaScript Bitwise XOR (^)

Bitwise XOR returns 1 if the bits are different:

DecimalBinary
500000000000000000000000000000101
100000000000000000000000000000001
5 ^ 100000000000000000000000000000100 (4)

例子

let x = 5 ^ 1;
亲自尝试 »

JavaScript Bitwise NOT (~)

DecimalBinary
500000000000000000000000000000101
~511111111111111111111111111111010 (-6)

例子

let x = ~5;
亲自尝试 »

JavaScript (Zero Fill) Bitwise Left Shift (<<)

This is a zero fill left shift. One or more zero bits are pushed in from the right, and the leftmost bits fall off:

DecimalBinary
500000000000000000000000000000101
5 << 100000000000000000000000000001010 (10)

例子

let x = 5 << 1;
亲自尝试 »

JavaScript (Sign Preserving) Bitwise Right Shift (>>)

This is a sign preserving right shift. Copies of the leftmost bit are pushed in from the left, and the rightmost bits fall off:

DecimalBinary
-511111111111111111111111111111011
-5 >> 111111111111111111111111111111101 (-3)

例子

let x = -5 >> 1;
亲自尝试 »

JavaScript (Zero Fill) Right Shift (>>>)

This is a zero fill right shift. One or more zero bits are pushed in from the left, and the rightmost bits fall off:

DecimalBinary
500000000000000000000000000000101
5 >>> 100000000000000000000000000000010 (2)

例子

let x = 5 >>> 1;
亲自尝试 »

Binary Numbers

Binary numbers with only one bit set is easy to understand:

Binary RepresentationDecimal value
000000000000000000000000000000011
000000000000000000000000000000102
000000000000000000000000000001004
000000000000000000000000000010008
0000000000000000000000000001000016
0000000000000000000000000010000032
0000000000000000000000000100000064

Setting a few more bits reveals the binary pattern:

Binary RepresentationDecimal value
000000000000000000000000000001015 (4 + 1)
0000000000000000000000000000110113 (8 + 4 + 1)
0000000000000000000000000010110145 (32 + 8 + 4 + 1)

JavaScript binary numbers are stored in two's complement format.

This means that a negative number is the bitwise NOT of the number plus 1:

Binary RepresentationDecimal value
000000000000000000000000000001015
11111111111111111111111111111011-5
000000000000000000000000000001106
11111111111111111111111111111010-6
0000000000000000000000000010100040
11111111111111111111111111011000-40

Converting Decimal to Binary

例子

function dec2bin(dec){
  return (dec >>> 0).toString(2);
}
亲自尝试 »

Converting Binary to Decimal

例子

function bin2dec(bin){
  return parseInt(bin, 2).toString(10);
}
亲自尝试 »