力扣刷题Days18-190颠倒二进制位(js)

目录

1,题目

2,代码

1,逐位颠倒

8=00001011

循环过程:

最终结果:

3,学习与总结

1,<< 位运算符


1,题目

颠倒给定的 32 位无符号整数的二进制位。

2,代码

1,逐位颠倒

/**
 * @param {number} n - a positive integer
 * @return {number} - a positive integer
 */
var reverseBits = function(n) {
    // 存储最终结果
    let revRes = 0;
    for(let i =0;i<32 && n> 0;i++){
       revRes |= (n & 1)<< (31-i);
       n >>>= 1;
    }

    return revRes >>> 0;
    
};
  1. for (let i = 0; i < 32 && n > 0; ++i) {

    • 这一行开始一个循环,从0迭代到31(包含),总共32次,对应n的32位。循环的另一个条件是n > 0,这是为了优化性能,一旦n变为0,就没有必要继续循环,因为剩下的位都是0。
  2. rev |= (n & 1) << (31 - i);

    • 在这一行,首先通过n & 1获取n的最低位(即最右边的位),然后将这个位左移(31 - i)位,将它放置到颠倒后的正确位置上。接着,使用位或操作|=将这个位加到rev上。这样,每一次循环都会将n的一个位颠倒到rev的对应位置上。
  3. n >>>= 1;

    • 这一行使用无符号右移操作符>>>n右移一位。这样做是为了在下一次循环中处理n的下一个最低位。无符号右移确保了当n被视为无符号整数时,高位补0。
  4. return rev >>> 0;

    • 最后一行返回颠倒位后的结果rev这里使用>>> 0是一个技巧,用于确保结果是一个32位无符号整数。在JavaScript中,即使变量已经是一个无符号整数,这种操作也可以保证结果正确无误地被视为无符号整数。

以8位二进制为例:

8=00001011

循环过程:

我们逐位遍历n,并将每一位移动到其颠倒后的位置。

  1. 第1次迭代(i = 0)

    • n & 1得到n的最低位,即1
    • 将这个位左移(7 - 0)位,得到10000000
    • 10000000通过位或操作加到rev上,rev变为10000000
    • n右移一位,变为00000101
  2. 第2次迭代(i = 1)

    • 类似地,处理后n的最低位,得到1,左移(7-1)得到1000000。
    • 与之前的rev进行或运算,得到rev=11000000。
    • n右移一位,变为00000010
  3. 第3次迭代(i = 2)

    • 处理n的最低位0,rev不变。
    • n右移一位,变为00000001
  4. 第4次迭代(i = 3)

    • 处理n的最低位1,左移得到(7-3)位,得到10000上。
    • 与之前的rev进行或运算,得到rev=11010000。
    • n右移一位,变为0000 0000。
  5. 第5次迭代(i = 4)
    • n=0 循环终止

最终结果:

  • 经过上述步骤后,我们得到rev11010000(以8位为例)。这是原始二进制位00001011颠倒后的结果。

3,学习与总结

1,<< 位运算符

<< 是一个位运算符,在各种编程语言中都有定义,称为“左移位”运算符。它将数值的二进制表示向左移动指定的位数。

左移位运算符的规则和效果如下:

  1. 基本操作:对于表达式 a << b,它的意思是将 a 的二进制表示向左移动 b 位。右边空出的位将用0填充。

  2. 乘以2的效果:左移一位的效果等同于将数值乘以2。更具体地说,a << b 等同于 a 乘以 2^b(2的b次方)。这是因为二进制系统中每向左移动一位,就相当于该数值乘以2。

  3. 溢出处理:当你对一个整数左移位时,最左边超出该类型所能表示范围的位将被丢弃,而新的空位(在右边)将用0填充。这可能导致正数变成负数(对于有符号整数),或者是简单地丢失高位数据,具体取决于使用的是有符号整数还是无符号整数。

  4. 实例:如果我们有一个整数 2,其二进制表示为 10,那么 2 << 1 的结果将是 4,二进制表示为 100。相同地,2 << 2 的结果将是 8,二进制表示为 1000

位运算分治 第二次再学习吧。


昨天忙于开会,没有做题!

告诫自己:贵在坚持,越是第一次接触,越不要贪快!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高频:spring知识

1、bean的生命周期&#xff1f; 主要阶段 初始化 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext67424e82: startup date []; root of context hi…

代码原理文献阅读(4)_3.12

4.2.经济调度问题(ED) 事实上&#xff0c;UC本质上也是一种ED问题。但随着电力电子技术的快速发展&#xff0c;越来越多的新型设备接入电力系统&#xff0c;调度逐渐变得"杂"、"散"、"灵活" 。此时&#xff0c;系统受到不确定性的影响更加强烈&a…

微信小程序 uniapp+vue学生考勤签到系统19j29

签到基本是没一个学生和教育工作者都要面对的一个事情&#xff0c;传统的签到都是需要单独找老师签到&#xff0c;或者老师课堂上单名来完成的&#xff0c;但是随着时代的发展这种比较落后的管理方式已经逐渐的被广大高校摒弃&#xff0c;教育工作者需要一种更加灵活且操作方便…

OCR-free相关论文梳理

⚠️注意&#xff1a;暂未写完&#xff0c;持续更新中 引言 通用文档理解&#xff0c;是OCR任务的终极目标。现阶段的OCR各种垂类任务都是通用文档理解任务的子集。这感觉就像我们一下子做不到通用文档理解&#xff0c;退而求其次&#xff0c;先做各种垂类任务。 现阶段&…

Linux系统架构----Tomcat 部署

一.Tomcat概述 Tomcat服务器是一个免费的开放式源代码的web应用服务器&#xff0c;属于轻量级应用级服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP程序的首首选。 一般来说&#xff0c;tomcat虽然和Apache或者Nginx这些…

CSS:实现择色器透明度条的两种方法(附赠一个在线图片转base64网站)

一、效果展示 二、实现方式 1.锥形渐变 .main{width: 600px;height: 20px;background: repeating-conic-gradient(rgba(1, 1, 1, 0.1) 0 25%,transparent 0 50%);background-size: 20px 20px;} 2.背景图 将一个四方格图片转为base64然后直接在css中使用 .main1 {width: 600p…

RabbitMQ 模拟实现【四】:虚拟主机设计

文章目录 虚拟主机设计虚拟主机分析交换机和虚拟主机之间的从属关系核心 API发布消息订阅消息应答消息消费者管理类 虚拟主机设计 虚拟主机分析 类似于 MySQL 的 database&#xff0c;把交换机&#xff0c;队列&#xff0c;绑定&#xff0c;消息…进⾏逻辑上的隔离&#xff0…

医学数据分析中缺失值的处理方法

医学数据分析中缺失值的处理方法 &#xff08;为了更好的展示&#xff0c;在和鲸社区使用代码进行展示&#xff09; 医学数据分析中&#xff0c;缺失值是不可避免的问题。缺失值的存在会影响数据的完整性和准确性&#xff0c;进而影响分析结果的可靠性。因此&#xff0c;在进…

php+vue+mysql公司员工薪酬工资管理系统

采用面向对象的思维方式&#xff0c;以符合实际的功能与性能要求&#xff0c;并进行了创新。为了提升小型企业工资管理的自动化和友善性的小型企业工资管理系统。 本文提出了一种基于面向对象的思想方法&#xff0c;以适应系统的实际功能与性能要求。为了使小型企业工资管理更具…

柚见第十期(后端队伍接口详细设计)

创建队伍 用户可以 创建 一个队伍&#xff0c;设置队伍的人数、队伍名称&#xff08;标题&#xff09;、描述、超时时间 P0 队长、剩余的人数 聊天&#xff1f; 公开 或 private 或加密 信息流中不展示已过期的队伍 请求参数是否为空&#xff1f;是否登录&#xff0c;未登录不…

决策树 | 分类树回归树:算法逻辑

目录 一. 决策树(Decision Tree)1. 决策树的构建1.1 信息熵(Entropy)1.1.1 信息量&信息熵 定义1.1.2 高信息熵&低信息熵 定义1.1.3 信息熵 公式 1.2 信息增益(Information Gain)1.2.1 信息增益的计算1.2.2 小节 2. 小节2.1 算法分类2.2 决策树算法分割选择2.3 决策树算…

Python应用数值方法:工程与科学实践指南

信息技术时代的挑战与机遇 我们正处在一个信息技术高速发展的时代&#xff0c;这是一个科技与创新蓬勃发展的时代。大数据与人工智能的崛起&#xff0c;正以前所未有的速度推动着传统技术的智能化变革。这种变革不仅带来了前所未有的机遇&#xff0c;也对科学和工程技术人员的…

什么时候要分库分表

对于一个日活用户在百万数量级的商城来说&#xff0c;每天产生的订单数量可能在百万级&#xff0c;特别在一些活动促销期间&#xff0c;甚至上千万。 假设我们基于单表来实现&#xff0c;每天产生上百万的数据量&#xff0c;不到一个月的时间就要承受上亿的数据&#xff0c;这…

水库大坝安全监测中需要注意的事项

随着经济和社会的发展&#xff0c;水资源的需求也在不断增加。因此&#xff0c;建设水库已成为保障水资源的主要方式之一。然而&#xff0c;随着水库规模的增大和工程的复杂性的增加&#xff0c;水库大坝的安全问题也日益引起重视。为此&#xff0c;需要对水库大坝进行安全监测…

2024年云服务器ECS价格表出炉——阿里云

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

变量的本质和命名规则

变量的本质 内存:计算机中存储数据的地方&#xff0c;相当于一个空间变量本质:是程序在内存中申请的一块用来存放数据的小空间 变量命名规则与规范 规则: 不能用关键字 关键字:有特殊含义的字符&#xff0c;JavaScript 内置的一些英语词汇。例如:let、var、if、for等>只…

2024阿里技术官重磅推出“Java进阶必备宝典” 5大专题 6000字解析

5.JVM实战 CPU占用过高案例实战 内存占用过高案例实战 15种方式编写高效优雅Java程序实战 6.JVM底层技术 亿级流量高井发下GC预估与调优 JHSDB工具透视L ambda底层实现 JVM(HotSpot)核心源码解读 JVM核心模块(GC算法)手写实战 核心三&#xff1a;网络编程与高效IO 1.网络…

人形双臂机器人重大进展!顶刊公布业界首个双臂通用协同操作架构

图1&#xff1a;人居环境下的人形双臂机器人系统 通用人形机器人作为近年来机器人与AI交叉领域的研究热点和技术竞争高地&#xff0c;因其具备在非结构化人居环境中承担各种琐碎家务的潜力而得到广泛关注。人形双臂系统直接承载着人形机器人操作任务的执行能力&#xff0c;通用…

使用ai智能工具,让短视频超强变现。利用人工智能创作短视频

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 以下文章简单介绍如何利用人工智能来制作短视频&#xff0c;来实现资源变现。 一、…

ARM TrustZone技术解析:构建嵌入式系统的安全扩展基石

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-LOdvohfCEnd8eKyd {font-family:"trebuchet ms",verdana,arial,sans-serif;f…
最新文章