JavaScript位运算的妙用

位运算的妙用: 奇偶数, 色值换算,换值, 编码等

位运算的基础知识:

  1. 操作数是32位整数
  2. 自动转化为整数
  3. 在二进制下进行运算

一.按位与&

判断奇偶数:

  1. 奇数: num & 1 == 1
  2. 偶数: num & 1 == 0

基本知识:

  1. 用法:操作数1 & 操作数2
  2. 规则:有 0 则为 0,双 1 则为 1
  3. 原理:先将操作数1操作数2转为二进制数,按照第2步进行计算
 

二.按位或|

按位或|取整

  1. num | 0

        eg: 5.23 | 0 => 5.23 | 0的结果是5

按位或|

  1. 自身|自身=自身,可以比较数值相等(仅限于整数)

三.按位非~

按位非远算符(~),反转操作数的位. 表象是对数字为负, 然后减去1(-x-1)

        eg: ~9 = -9 -1 = -10

按位非~: 判断数组中是否包含某个元素

  1. 不存在, indexOf返回-1
  2. ~-1 = -(-1)-1=1-1=0
  3. ~arr.indexOf(val) => 数组中不存在val这个值

按位非~取整

  1. ~~x 

        eg: ~~5.5677878 // 5

四.按位异或^

按位异或^ 归零律,恒等律,自反,集合律

  1. 归零律: a^a=0; 自己异或自己,位数上的值肯定相同
  2. 恒等律:a^0=a; 自己异或自己, 自己是啥结果是啥
  3. 自反: a^a^a=0^a = a; a三次^等于它自己
  4. 集合律: a^b^c == c^b^a, 与顺序无关

按位异或^ 值交换

  1. 变量值为数字,完成值的交换(不用增加临时变量)

示例: 

let a = 10
let b = 20
a^=b //=> a = b^a => a^b
b^=a //=> b = a^b => (a^b) ^b => a ^ (b^b) =>  a ^ 0 =>  a => 结果是b=a
a^=b //=> a = b^a => b^b^b ^ (a^a) => b ^ 0 => b =>结果是: a = b
console.log('a:', a) // 20
console.log('b:', b) // 10

五.左移运算符:<<

<< 运算符执行左移位运算。

在移位运算过程中,符号位始终保持不变。

如果右侧空出位置,则自动填充为 0;

超出 32 位的值,则自动丢弃

console.log(5 << 2); // 20

基本知识:

  1. 用法:操作数1 << 左移位数
  2. 规则:符号位不变,按位左移,右边补0
  3. 原理:先把操作数1转换为二进制数

六.右移运算符:>>

>> 运算符执行有符号右移位运算。

与左移运算操作相反,它把 32 位数字中的所有有效位整体右移,再使用符号位的值填充空位。

移动过程中超出的值将被丢弃。

console.log(1000 >> 8); // 3

基本知识:

  1. 用法:操作数1 >> 右移位数
  2. 规则:符号位不变,按位右移,左边补0
  3. 原理:先把操作数1转换为二进制数


七.以下是JavaScript提供的二进制和十进制互转方法:

二进制转十进制方法: parseInt

parseInt(string, radix) 

eg: console.log(parseInt(1010,2)); // 10

十进制转二进制: 字符串.toString(2)

同理: 十进制转16进制是: 字符串.toString(16)

eg: 

const number = 10
console.log(number.toString(2)); // 1010

运用场景:

rgb和16进制颜色相互转换:

function colorRGBToHex(rgb) {// split的参数可以是正则const rgbArr= rgb.split(/[^\d]+/)// ['',  '数字1', '数字2', '数字3', '']const color = rgbArr[1] << 16 | rgbArr[2] << 8 | rgbArr[3];return `#${color.toString(16)}`
}
console.log(colorRGBToHex('rgb(204, 0, 255)'))// 16进制转rgb格式
function colorHexToRGB(hex) {// 转为6位的16进制, 0x??????let newHex = hex.replace('#', '0x'),r = newHex >> 16,g = newHex >> 8 & 0xff,b = newHex & 0xffreturn `rgb(${r},${g},${b})`
}
console.log(colorHexToRGB('#CC00FF'))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/142684.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机柜PDU产品采购与安装指南——TOWE精选

机柜PDU指的是Power Distribution Unit&#xff0c;即电源分配单元。它是一种电子设备&#xff0c;通常用于为数据中心、服务器机房等设施中的计算机和其他设备提供电力&#xff0c;是各行业数据中心“标配”构成部分&#xff0c;以确保服务器等用电设备的安全和稳定运行。 数据…

查看Linux系统信息的常用命令

文章目录 1. 机器配置查看2. 常用分析工具3. 常用指令解读3.1 lscpu 4. 定位僵尸进程5. 参考 1. 机器配置查看 # 总核数物理CPU个数x每颗物理CPU的核数 # 总逻辑CPU数物理CPU个数x每颗物理CPU的核数x超线程数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| w…

[Linux]多线程编程

[Linux]多线程编程 文章目录 [Linux]多线程编程pthread_create函数pthread_join函数pthread_exit函数pthread_cancel函数pthread_self函数pthread_detach函数理解线程库和线程id Linux操作系统下&#xff0c;并没有真正意义上的线程&#xff0c;而是由进程中的轻量级进程&#…

在多台服务器上运行相同命令(二)、clush

介绍安装配置互信认证参数含义基本使用节点组拷贝文件 介绍 Clush&#xff08;Cluster Shell&#xff09;是一个用于管理和执行集群操作的工具&#xff0c;它允许你在多台远程主机上同时执行命令&#xff0c;以便批量管理服务器。Clush 提供了一种简单而强大的方式来管理大规模…

“押宝高手”乐视视频再出手,看中商业传奇剧《大盛魁》

作为最早开始版权采购的长视频平台&#xff0c;乐视视频一向擅长“押宝”优质内容。从《甄嬛传》到《白鹿原》等&#xff0c;乐视拿下了众多经典古装剧、年代剧的版权。 9月&#xff0c;乐视视频再次出手拿下的历史传奇剧《大盛魁》开始热播。该剧由王新民导演执导&#xff0c…

全渠道客服体验:Rocket.Chat 的无缝互动 | 开源日报 No.41

RocketChat/Rocket.Chat Stars: 36.9k License: NOASSERTION Rocket.Chat 是一个完全可定制的开源通信平台&#xff0c;适用于具有高标准数据保护要求的组织。我们是团队沟通场景下的最终免费开源解决方案&#xff0c;可以实现同事之间、公司之间或客户之间的实时对话。提高生…

SSM - Springboot - MyBatis-Plus 全栈体系(十三)

第三章 MyBatis 一、MyBatis 简介 1. 简介 MyBatis 最初是 Apache 的一个开源项目 iBatis, 2010 年 6 月这个项目由 Apache Software Foundation 迁移到了 Google Code。随着开发团队转投 Google Code 旗下&#xff0c; iBatis3.x 正式更名为 MyBatis。代码于 2013 年 11 月迁…

TS中class类的基本使用

想要创建对象&#xff0c;必须要先定义类&#xff0c;所谓的类可以理解为对象的模型&#xff0c;程序中可以根据类创建所指定类型的对象。 一、使用class关键字定义类 class 类名 { } // 使用class关键字来定义一个类 class Person{}// 使用new关键字创建一个对象 const per …

Pikachu靶场——SSRF 服务端请求伪造

文章目录 1 SSRF 服务端请求伪造1.1 SSRF(curl)1.1.1 漏洞防御 1.2 SSRF(file_get_content)1.2.1 漏洞防御1.2.3 SSRF 防御 1 SSRF 服务端请求伪造 SSRF(Server-Side Request Forgery:服务器端请求伪造) 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能&a…

【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Qwen-VL:多功能视觉语言模型,能理解、能定位、能阅读等

Overview 总览摘要1 引言2 方法2.1 模型结构2.2 输入输出 3 训练3.1 预训练3.2 多任务预训练3.3 监督finetune 4 评测4.1 图像文本描述和视觉问答4.2 面向文本的视觉问答4.3 指代表达理解4.4 视觉语言任务中的小样本学习4.4 现实用户行为下的指令遵循 5 相关工作6 总结与展望附…

【boost网络库从青铜到王者】第七篇:asio网络编程中的异步echo服务器,以应答为主

文章目录 1、简介2、echo模式应答异步服务器2.1、Session会话类2.2、Server类为服务器接收连接的管理类 3、客户端4、隐患5、总结 1、简介 前文已经介绍了异步操作的api&#xff0c;今天写一个简单的异步echo服务器&#xff0c;以应答为主。 2、echo模式应答异步服务器 2.1、…

小样本学习

一、基础知识 小样本学习&#xff08;few shot learning&#xff09;旨在使用先验知识&#xff08;prior knowledge&#xff09;基于有限数量的样本推广&#xff08;generaling&#xff09;到新任务&#xff08;new task&#xff09;。这些先验&#xff08;prior knowledge&am…

初识C语言——详细入门(系统性学习day4)

目录 前言 一、C语言简单介绍、特点、基本构成 简单介绍&#xff1a; 特点&#xff1a; 基本构成&#xff1a; 二、认识C语言程序 标准格式&#xff1a; 简单C程序&#xff1a; 三、基本构成分类详细介绍 &#xff08;1&#xff09;关键字 &#xff08;2&#xf…

Blender导出FBX给UE5

最近在学习UE5的资源导入&#xff0c;总结如下&#xff1a; 建模使用Blender&#xff0c;UE5版本是5.3 1.纯静态模型导入UE5 Blender FBX导出设置保持默认即可&#xff0c; UE5把导入设置里Miscellaneous下Force Front XAxis和Convert Scene Unit勾选即可 2.带骨骼动画的模型…

字符函数和字符串函数模拟实现与详解————长度不受限制的字符串函数

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2strlen函数 3.strcpy函数…

csdn未经允许将我的文章设置成vip收费

以前在csdn写了一些笔记&#xff0c;后来不用csdn了&#xff0c;想着留下这些笔记或多或少能帮助其他初学者&#xff0c;就没管它。结果csdn把文章设置成收费了&#xff0c;这个收费不是我本人弄的&#xff0c;是csdn弄的&#xff01;我现在只能把这些文章删除掉了。

Docker初识

什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环境不一定一致&#xff0c;会遇到…

Tungsten Fabric数据量过大问题处理初探

开源SDN系统Tungsten Fabric面临数据产生过多问题。 经排查&#xff0c;产生数据多出自analytics组件的Cassandra数据库()。很多分析数据会存储至Cassandra库&#xff0c;并持久化处理。 没有特殊调整的话&#xff0c;目录在 /var/lib/docker/volumes/analytics_database_an…

【大数据开发技术】实验04-HDFS文件创建与写入

文章目录 一、实验目标二、实验要求三、实验内容四、实验步骤 一、实验目标 熟练掌握hadoop操作指令及HDFS命令行接口掌握HDFS原理熟练掌握HDFS的API使用方法掌握单个本地文件写入到HDFS文件的方法掌握多个本地文件批量写入到HDFS文件的方法 二、实验要求 给出主要实验步骤成…