Js中什么是位运算?

位运算一直不太懂,所以找了个时间把这个学习了,如果有写的不好请评论联系我纠正

什么是位运算?


位运算是在数字底层(即表示数字的 32 个数位)进行运算的。由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序逻辑,缺点是很不直观,许多场合不能够使用

具体计算机的知识,这里我们不进行详解,只要知道一个点 位运算都是以二进制来计算的,所谓位也就是0110中的一位数字

例子:

10进制 二进制 js中显示二进制
1 0001 1
2 0010 10
5 0101 101
10 1010 1010

注: 在二进制中满 2进1,所以 2会等于 0010,js打印二进制,默认会进行去除前面补位的0,如 0001,会变成1,

正式进入正题

  1. 或运算 = a | b

对每一位进行 or 比较, a和b中同位置任意一个二进制位数为1, 既结果为1, 也就是 a | b就是1 ,你也可以理解为 ||

例子: 9 | 3 = 11

十进制 = 第四位 第三位 第二位 第一位
9 = 1 0 0 1
3 = 0 0 1 1
11 = 1 0 1 1

拿 9的第一位 '1' 和 3的第一位 '1'相比, 满足其中一个有1,所以计算拿出来的结果 第一位等于1,补零也就是: 0001,其他位相同理。

第二位 : 1 第三位: 0 第四位 :1,联合起来: 1011

用处:1取整

let a = 1.5
console.log(a | 0) // 1
//原理:  1.5 => 0001 
//         0 => 0000  
//              0001  输入就是1

  1. 与运算 = a &b

对每一位进行 AND 比较, 同位置两个二进制位数: a和b同时为1, 结果才为1, 也就是 a & b = 1 ,你也可以理解为 &&

例子: 9 & 3 = 1

十进制 = 第四位 第三位 第二位 第一位
9 = 1 0 0 1
3 = 0 0 1 1
1 = 0 0 0 1

拿 9的第一位 '1' 和 3的第一位 '1'相比, 都为1,计算结果:第一位1,补零也就是: 0001,其他位相同理。

第二位 : 0 第三位: 0 第四位 :0,联合起来: 0001

用处之一:判断奇偶

思路:奇数的二进制最后一位必然为1,所以任意一个奇数 & 1 一定等于1

const isOdd = (num)=> num & 1 === 1;
isOdd(5)
//原理:  1 => 0101 
//        0 => 0001  
//             0001  输入就是1
  1. 异或运算 = a ^ b

    什么是异或: 两个数是否有差异, 1 ^ 1 = 0 因为没有差异,

    1 ^ 0 = 1

对每一位进行 异或 比较, 同位置两个二进制位数: a和b不相等时, 结果才为1, 也就是 1 ^ 0 = 1 ,你也可以理解为 !==

例子: 9 ^ 3 = 1

十进制 = 第四位 第三位 第二位 第一位
9 = 1 0 0 1
3 = 0 0 1 1
10 = 1 0 1 0

拿 9 的第一位 '1' 和 3的第一位 '1'相比, 没有差异 1 !== 1 =false,计算结果:0, 补零也就是: 0000,其他位相同理。

第二位 : 1 第三位: 0 第四位 :1,联合起来: 1010

用处:交换两个变量(不能三个变量)

let a = 5,
    b = 6;

a = a ^ b; 
b = a ^ b;
a = a ^ b; //这里很重要最后一步还原回去原来的值
  1. 按位非 = ~ a

对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码)

Ps: 对任一数值 x 进行按位非操作的结果为 -(x + 1)。例如,~5 结果为 -6:

例子: ~5 = - 6

应用场景:

  1. 取整
~~(-5.88) // -5
  1. 左移动操作符 <<

什么是左移操作符? 将位数向左移动 N 位,并且在右边补 N个0,被左移挤出的位数直接被丢弃

例子: 2 << 2 = 8

十进制 = 第四位 第三位 第二位 第一位
2 = 0 0 1 0
8 = 1 0 0 0

2 = 0010

8 = 1000

其实规律就是 number *= 2 ^ n

  1. 左移动操作符 >>

该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,拷贝最左侧的位以填充左侧。由于新的最左侧的位总是和以前相同,符号位没有被改变。所以被称作“符号传播”。

个人简单的理解,就是
例子: 8 >> 2 = 2

十进制 = 第四位 第三位 第二位 第一位
8 = 1 0 0 0
2 = 0 0 1 0

8 = 1000

2 = 0010

参考文章-深入研究Js的位运算及用法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容