美文网首页
关于javascript的按位移动操作符

关于javascript的按位移动操作符

作者: 静影沉璧90 | 来源:发表于2019-07-25 18:04 被阅读0次

一、前置知识

1、二进制中的原码、反码、补码的生成规则:(以100为例)

原码: 0000 0000 0110 0100

反码:1111 1111 1001 1011

求反规则

补码:1111 1111 1001 1100  = 1111 1111 1001 1011(反码)+ 1

二进制加法规则(逢二进一)

注意:在计算机中,负数以其正值的补码形式表达,方法为其绝对值求反加一;

2、二进制中,如果是有符号的表示,则第一个位为符号位,0表示正数,1表示负数。

二、按位移动操作符:

<<       左移

>>       有符号右移

>>>     无符号右移

按位移动操作符有两个操作数:一个是被移动的数字,一个要移动的长度。移动的方向根据操作符的不同而不同;

按位移动操作符会先将操作数转换位二进制32位的整数,并返回与左操作数相同类型的结果。右操作数应小于32位,否则只有最低5个字节会被使用;

注意:以下提到的操作数是指被移动的数字整体,不是其中的某一位数

1、左移(<<)

该操作符会将第一个操作数向左移动指定的位数,左侧移出的被丢弃,右侧用0填充;

eg:9 << 2

9转换位二进制:0000 0000  0000 0000 0000 0000 0000 1001

向左移动2位:    0000 0000 0000 0000 0000 0000 0010 0100

转换为10进制: 36

总结:在数字 x 上左移 y 比特得到 x * 2y

2有符号的右移(>>)

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

eg: 9 >> 2

9转换为二进制:0000 0000  0000 0000 0000 0000 0000 1001

向右移动2位:    0000 0000 0000 0000 0000 0000 0000 0010

转换为10进制:2

eg:  -9 >> 2

-9 转换为二进制: 1111 1111 1111 1111 1111 1111 1111  0111

          绝对值二进制:0000 0000 0000 0000 0000 0000 0000 1001

          取反码:           1111 1111 1111 1111 1111 1111 1111 0110

          取补码:           1111 1111 1111 1111 1111 1111 1111  0111

向右移动2为:       1111 1111 1111 1111 1111 1111 1111 1101

转换为10进制:  -3

          取反码(减1):1111 1111 1111 1111 1111 1111 1111 1100

           取原码:             0000 0000 0000 0000 0000 0000 0000 0011

3、无符号的右移(>>>)

该操作符将第一个操作数向右移动指定的位数,右侧移出的被丢弃,左侧用0填充。因为符号为变成了0,所以总是非负的,即使移动0个比特,结果也是非负的;

对于非负数,有符号的右移和无符号的右移返回的结果是相同的;

eg:9 >>> 2

9转换为二进制: 0000 0000  0000 0000 0000 0000 0000 1001

向右移动2位:     0000 0000 0000 0000 0000 0000 0000 0010

转换为十进制:    2

eg: -9 >>> 2

-9 转换为二进制: 1111 1111 1111 1111 1111 1111 1111  0111

          绝对值二进制:0000 0000 0000 0000 0000 0000 0000 1001

          取反码:           1111 1111 1111 1111 1111 1111 1111 0110

          取补码:           1111 1111 1111 1111 1111 1111 1111  0111

向右移动2位:       0011 1111 1111 1111 1111 1111 1111 1101

转换为十进制: 1073741821

相关文章

  • 关于javascript的按位移动操作符

    一、前置知识 1、二进制中的原码、反码、补码的生成规则:(以100为例) 原码: 0000 0000 0110 0...

  • JavaScript高程读书笔记(2)

    五、操作符 算数操作符、位操作符、关系操作符、 相等操作符 一元操作符++和--:注意a+++,- 位操作符按位非...

  • js中小数取整的方法

    常用方法 “双按位非”操作 按位或 按位异或 左移操作符

  • 按位操作符

    按位操作符 按位操作符是将操作数当做32为的比特序列(0和1组成),按位操作符操作数字的二进制形式,但是返回值依然...

  • JavaScript中按位操作符的有趣应用

    前言 今日早读文章由腾讯@CoyPan翻译授权分享。 正文从这开始~~ JavaScript提供了几种运算符,可以...

  • 位运算

    Java中的按位操作符有四个,分别是:&(按位与)、|(按位或)、^(按位异或)、~(按位非)。 1、先来看按位与...

  • 按位操作符

    按位操作符(Bitwise operators)将其操作数(operands)当作 32 位的比特序列(由 0 和...

  • 按位操作符

    平时很少用到按位操作符,总是记不清楚,特此记录一下: 运算符用法描述按位与( AND)a & b对于每一个比特位,...

  • 交换变量

    方法一:解构表达式(仅限于JavaScript) 方法二:使用中间变量 方法三:使用算数运算符 方法四:使用按位操作符

  • Swift - 高级运算符介绍

    除了基本运算符之外,Swift还支持位运算和位移运算,包括:1、按位取反运算:操作符是 ~2、按位与运算:操作符是...

网友评论

      本文标题:关于javascript的按位移动操作符

      本文链接:https://www.haomeiwen.com/subject/gtahrctx.html