一文了解按位操作符中左移与右移

2023-05-16

无意中看到>>、<<、>>>说实话一点也不知道这是什么,带着好奇心去了解了一下。
本文从一个小白的角度看这三个按位操作符的意思,会相对好理解。

按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。

>>(有符号位移):

用法:a>>b
描述:把a转化为二进制数并向右位移b(注:b<32)位(bit),右移出的数被抛弃,并复制最左侧的数填充左侧,由于新的最左侧的位总是和以前相同,符号位没有被改变。所以被称作“符号传播”
例子:
console.log(5<<2) 将5转成二进制:0000 0101
但是计算机存储数字时是32位,也就是:00000000000000000000000000000101
向右移2位:00000000000000000000000000000001,并且最左侧是0所以在左侧补上0,最后返回1
还有一种负数的情况:
console.log(-5<<2) 将-5转成二进制补码:1111 1011
也就是:11111111111111111111111111111011
向右移2位:11111111111111111111111111111110,最左侧是1所以在左侧补上1,最后返回-2

为什么说b<32位呢,主要是5<<32返回5,5<<33==5<<1是一样的,可以自己试一下

什么是补码?

先说什么是补码:
原码:将一个整数,转换成二进制,就是其原码。如1字节(8位)的5的原码为:0000 0101;-5的原码为1000 0101。
反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。-5的反码为1111 1010。
补码:正数的补码就是其原码;负数的反码+1就是补码。 如单字节的5的补码为:0000 0101;-5的原码为1111 1011。
想深入了解补码的点这里

取反+1怎么理解?

例如:
取反+1,就是补码
5-5=0,5=0000 0101,5取反=1111 1010 再加1,所以-5=1111 1011。取反(反码)就是把0换成1,1换0,补码就再加1
如果还想知道为什么,可能就是想明白1+1为什么等于2了

为什么叫有符号位移?

通过原码发现最左侧就是所说的符号位,符号位表示负数还是正数。向右移动,左侧补码会有两种情况:
1.负数使用>>,符号位是1所以左侧会补1
2.正数使用>>,符号位是0所以左侧会补0
这也就是为什么上面说过复制最左侧的符号位填充左侧,保留数据的正或负(理解为保留正负号吧)。

>>>(无符号位移):

用法:a>>>b
描述:把a转化为二进制数并向右位移b(注:b<32)位(bit),最左边用0补充
例子:
console.log(5>>>2) 将5转成二进制就是:0000 0101
也就是:00000000000000000000000000000101
向右移2位:00000000000000000000000000000001,并且最左侧补上0,最后返回1
来个负数的:
console.log(-5>>>2) 将-5转成二进制补码:1111 1011
也就是:11111111111111111111111111111011
向右移2位:00111111111111111111111111111110,并且最左侧补上0,最后返回1073741822
无符号位移>>>,无论正数负数都是最左侧填充0
因为符号位变成了0,所以结果不为负数(即便右移0位,结果也是非负的)

<<:

用法:a<<b
描述:把a转化为二进制数并向左位移b(注:b<32)位(bit),右边用0补充
例子:
console.log(5<<2) 将5转成二进制也就是:0000 0101
也就是:00000000000000000000000000000101
向左移2位:00000000000000000000000000010100,并且补上0,最后返回20

为什么没有<<<?

<<代表二进制向左移,右边补0
如果真的有<<<也是向左移,右边也是补0。所以没有第二个情况,就不需要多此一举啦。

我理解的很浅显,但还是明白这是干啥得了,如有错请指出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文了解按位操作符中左移与右移 的相关文章

  • ArcMap 数据的标注和注记

    标注 xff1a 可按照当前地图比例尺下的最佳位置重新加载 注记 xff1a 每条注记都存储自身的位置 注记可由标注转化而来 本文包括几种基本的标注方法 包括多属性字段标注 分类标注 分数型标注 道路名称标注等 多个属性字段标注 如下图 x
  • ArcMap 矢量数据空间校正

    功能 xff1a 将存在偏移 误差的数据进行校正 本文包括图形位移校正 橡皮拉伸 接边的操作方法 情况1 xff1a 两图层存在位置偏移 xff0c 现需校正其中一个数据 xff0c 使两个数据完全重合 Arcmap中放入两个数据 xff0
  • 【oracle报错】 exp-00106数据链接口令无效

    问题 xff1a 用exp导出数据库中的data 1表 xff0c 报错 exp 00106数据链接口令无效 xff0c 但其他表可正常导出 分析 xff1a 与无效dblink有关 解决过程 xff1a 用查询语句 select from
  • ARCGIS安装及卸载中遇见的一些问题

    1 提示无 netframework3 5 注意 xff1a 缺少 netframework3 5 安装4 5依旧无法安装arccgis desktop 解决方法 xff1a 计算机单击右键选择 管理 xff0c 在 服务管理器 中选择 添
  • ora-00972标识符过长

    ora 00972标识符过长 可能原因 xff1a Oracle中表名 xff0c 列名 xff0c 标识列字符不能超过30个字符 但我是利用plsql导入csv格式数据时 xff0c 报错ora 00972 xff0c 表是之前建好的 x
  • Ubuntu切换内地源

    编辑 etc apt sources list删除里面的所有内容添加以下内容到sources中保存即可 阿里云源 deb http mirrors aliyun com ubuntu focal main restricted univer
  • oracle 用exp导出表

    用于导出oracle数据库表空间的表 xff0c 有以下几种情况 一般导出 xff1a exp username password 64 ip地址 实例 file 61 路径及文件名 导出表空间指定的表 exp username passw
  • 动态获取API的地址

    原理 xff1a 现在虽然大部分Win32程序都使用ExitProcess函数来终止执行 xff0c 但是其实用ret指令也是可以的 我们的应用程序的主程序可以被看成是一个被Windows调用的子程序 当父进程要创建一个子进程时 xff0c
  • 使用go做后端,用户密码采取bcrpyt哈希加密

    bcrypt哈希由多个部分组成 这些部分用于确定创建哈希的设置 xff0c 从而可以在不需要任何其他信息的情况下对其进行验证 相较于MD5 xff0c SHA 256等哈希算法更适合用于做密码的哈希 xff0c 原因在于bcrypt算法哈希
  • 4 Spring Cloud微服务入门之OpenFeign总结

    1 OpenFeign是什么 官网 https spring io projects spring cloud openfeign OenFeign 是一个声明式的WebService客户端 使用openfeign 能让编写Web Serv
  • Ubuntu18.04安装ssh并实现本机免密登录

    hadoop需要使用SSH的方式登陆 xff0c linux下需要安装SSH 客户端已经安装好了 xff0c 一般只需要安装服务端就可以了 Ubuntu默认并没有安装ssh服务 xff0c 如果通过ssh远程连接到Ubuntu xff0c
  • AndroidStdio换源

    Android Stdio开发学习2022 10 2 第一步 换源 Android Stdio默认源是外国的 xff0c 访问很慢 xff0c 所以需要换成国内的镜像源 阿里源 xff1a https maven aliyun com ne
  • 【杂物间3】AI,ML,RL,DL,NLP,CV…搞清了这些是啥

    pre 在看一篇公众号推文的时候 xff0c 里面有这么一句话 xff1a 诶 xff0c 看这意思 xff0c CV xff0c NLP xff0c RL xff0c GNN是DL的纵向领域 xff1f 其他三个尚且眼熟 xff0c 但R
  • 数据库系统课后作业1

    关系模式 xff1a Department dNo dName officeRoom homePage Student sNo sName sex age dNo Course cNo cName cPNo credit dNo SC sN
  • 保研面试/考研复试机器学习问题整理

    1 什么是梯度爆炸和梯度消失 xff1f 如何解决梯度消失 梯度爆炸 xff1f 在反向传播过程中需要对激活函数进行求导 xff0c 如果导数大于 1 1 1 xff0c 那么随着网络层数的增加梯度更新将会朝着指数爆炸的方式增加这就是梯度爆
  • 树莓派连接vnc教程

    1 输入 sudo raspi config 进入到系统设置中开启vnc服务 2 进入后选择 Interfacing Options 进入 3 选择 VNC 进入 4 yes 下载软件 xff1a VNC Viewer 5 连接vnc xf
  • Hive之解析Json数组

    目录 Hive自带的json解析函数1 get json object函数2 json tuple函数 Hive解析json数组一 嵌套子查询解析json数组二 使用 lateral view 解析json数组 Hive自带的json解析函
  • MobaXterm实现代理功能及把内网服务器,用公网地址转发出去。

    MobaXterm实现代理功能及把内网服务器 xff0c 用公网地址转发出去 1 MobaXterm配置 192 168 1 82为内网 xff0c 需要公网连接上来 xff0c 所以用公网服务器做代理使用 xff0c 实现ssh 公网ip
  • docker-compose 搭建 nextcloud + onlyoffice 实现在线编辑,云存储等多项功能。

    添加源 yum span class token function install span epel release y 关闭防火墙 xff0c selinux systemctl stop firewalld systemctl dis

随机推荐

  • WiFi 中继/桥接功能 — 基于OpenWRT路由器

    一 中继和桥接介绍 1 网络拓扑图 2 功能介绍 1 无线中继 无线中继 xff0c 即无线分布系统 WDS 组网 xff0c 其工作原理是将无线信号从上一个中继点接力传递到下一个中继点 xff08 下一个点可以在不同信道上接收和转发 xf
  • 经典数学问题——三门问题(数据分析面试题)

    三门问题出自美国的电视游戏节目 Let s Make a Deal xff0c 问题名字来自该节目的主持人蒙提 霍尔 xff08 Monty Hall xff09 xff0c 所以三门问题又叫做蒙提霍尔悖论 让我们来看看三门问题 xff1a
  • N5095-Ubuntu系统开启Jellyfin硬件解码

    N5095 Ubuntu系统开启Jellyfin硬件解码 一 升级Ubuntu内核至5 18 ubuntu22 04安装后 xff0c 默认的内核版本为5 15 xff0c 而这个版本内含一个bug xff0c 导致11代IntelCPU无
  • 国产银河麒麟系统V10忘记密码重置操作

    国产电脑有忘记密码的 xff0c 因为银河麒麟系统是基于linux系统的 xff0c 不必像windows操作系统那样需要使用U盘来进行重置密码 xff0c 好像还简单一些 基本的操作也就3步 1 重启电脑进入Grub引导菜单 2 编辑引导
  • CentOS7安装xrdp(windows远程桌面连接linux)

    前提 CentOS安装桌面 xff0c 如果无桌面 xff0c 请执行 xff1a yum y groups install GNOME Desktop startx 1 安装xrdp 更具自己的系统位数选择对应的包 如果是32位使用则选择
  • Git命令测试(含结果图)

    Git命令测试 xff08 含结果图 xff09 一 文件添加 提交 xff08 一 xff09 初始化本地仓库 xff08 二 xff09 新建一个本地文件hello txt xff08 三 xff09 将该文件进行添加 xff08 四
  • OSPF协议实验

    目录 OSPF 三个阶段 OSPF实验 1拓扑搭建 2配置PC的ip信息 3配置路由 4完成配置进行测试 总结 OSPF OSPF Open Shortest Path First开放式最短路径优先 xff09 是一个内部网关协议 Inte
  • Linux 安装软件是错误:正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程

    原因是 xff1a 一般出现这种原因是因为文件上锁或者被占用解决办法 xff1a 删除lock xff1a sudo rm var cache apt archives lock删除lock xff1a sudo rm var lib dp
  • 封神台(尤里的复仇Ⅱ 回归)渗透第一步 信息收集1

    前言解题过程 前言 做这道题的时候 xff0c 我的心情真是跌宕起伏 为什么这么说 xff0c 且听我娓娓道来 解题过程 打开传送门 xff0c 被传送到这个网站 随便点了几个模块 xff0c 感觉都没有可利用的漏洞 xff0c 直接扫描目
  • 封神台(尤里的复仇Ⅱ 回归)绕过防护getshell

    解题思路 习惯在url后加admin xff0c 看是不是管理后台 一看发现是 xff0c 就不用目录扫描工具了 填入正确的验证码 xff0c 抓包输入 39 xff0c 查看有无报错 发现报错了 xff0c 存在报错注入 xff0c 看报
  • sql注入绕过安全狗4.0

    1 前言2 前置知识3 绕过关键字主要思路3 1绕过连体关键字思路3 2绕过单个关键字思路 4 以sqli labs Less 1 为例 xff0c 绕过安全狗4 1拦截order by4 2拦截union select4 3拦截datab
  • error during connect: This error may indicate that the docker daemon is not running解决方法

    因为我的截图工具截屏快捷键是ctrl 43 q xff0c docker desktop退出的快捷键也是ctrl 43 q xff0c 所以当我按了ctrl 43 q之后 xff0c docker desktop退出了 xff0c 然后我在
  • getshell思路

    getshell能干嘛文件上传getshell文件包含getshellsql注入getshell操作系统漏洞getshellRCE getshell总结 授人以鱼 xff0c 不如授人以渔 getshell能干嘛 1 执行终端命令 2 文件
  • hackmyvm入门(靶机网络配置)

    hackmyvm概述hackmyvm靶机下载地址靶机网络配置测试环境环境搭建 愉快玩耍 hackmyvm概述 hackmyvm是一个平台 xff0c 包含了大量靶机 xff0c 类似于vulnhub hackthebox等平台 xff0c
  • hackmyvm Rei靶机练习

    主机发现端口扫描漏洞挖掘权限提升 主机发现 攻击机ip 靶机ip sn 发送arp请求包探测目标ip是否在线 端口扫描 p 所有端口扫描 sV 查询开放端口的服务 这里65333是ssh服务 xff0c 63777是http服务 最好拿个记
  • web中间件日志分析脚本3.0(shell脚本)

    新添功能保存的日志代码 新添功能 3 0版本加了ssrf 目录遍历文件包含 优化自动创建目录功能 一般使用1 6 7即可 3 1版本 框架漏洞检测 封面字体颜色改变 保存的日志 fi 目录遍历 sqli ssrf xss 代码 span c
  • nginx版本平滑升级(超详细)

    一 前期准备二 开始实验安装旧版本安装新版本 三 可能遇到的问题 文章背景 xff1a 护网期间 xff0c 客户跟我说nginx有0day漏洞 xff0c 需要版本升级 xff0c 我寻思着我也不是运维啊 xff0c 问我干嘛 xff08
  • AndroidStudio2021.3logcat工具无法显示日志解决办法

    我的AS版本 2021 3 日志没有任何输出 解决办法 1 File gt setting 2 搜索logcat xff0c 点击Experimental 3 把logcat对应的选项去掉 4 重启AS就可以看到日志信息
  • Ubuntu 20.04 安装mysql数据库教程

    1 首先安装mysql程序 命令 xff1a sudo apt install mysql server 2 安装完查看mysql启动状态 xff1a 命令 xff1a systemctl status mysql 3 直接使用root账户
  • 一文了解按位操作符中左移与右移

    无意中看到 gt gt lt lt gt gt gt 说实话一点也不知道这是什么 xff0c 带着好奇心去了解了一下 本文从一个小白的角度看这三个按位操作符的意思 xff0c 会相对好理解 按位操作符操作数字的二进制形式 xff0c 但是返