力扣刷题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.hqwc.cn/news/537954.html

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

相关文章

利用位运算符设置标志位

在写程序的过程中&#xff0c;会碰到需要修改标志位的情况。比如需要设置一个文件标识符可读或可写&#xff0c;首先想到的是利用int变量&#xff08;1表示不可读不可写 &#xff0c;2表示不可读可写&#xff0c;3表示可读不可写&#xff0c;4表示可读可写&#xff09;。但是这…

Challenge 6 - OSCP C

156 开放了161端口,直接snmpbulkwalk扫描 snmpbulkwalk -c public -v2c 192.168.243.156 NET-SNMP-EXTEND-MIB::nsExtendObjects得到账号密码jack:3PUKsX98BMupBiCf 试了那几个web端口,发现可以登录8083的vesta,但是需要用户名大写Jack 接着登录之后里面可以创建计划任务…

【Spring Boot系列】快速上手 Spring Boot

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【Python】新手入门学习:详细介绍里氏替换原则(LSP)及其作用、代码示例

【Python】新手入门学习&#xff1a;详细介绍里氏替换原则&#xff08;LSP&#xff09;及其作用、代码示例 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyT…

4、设计模式之建造者模式(Builder)

一、什么是建造者模式 建造者模式是一种创建型设计模式&#xff0c;也叫生成器模式。 定义&#xff1a;封装一个复杂对象构造过程&#xff0c;并允许按步骤构造。 解释&#xff1a;就是将复杂对象的创建过程拆分成多个简单对象的创建过程&#xff0c;并将这些简单对象组合起来…

Spring揭秘:ClassPathScanningProvider接口应用场景及实现原理!

技术应用场景 ClassPathScanningCandidateComponentProvider是Spring框架中一个非常核心的类&#xff0c;它主要用于在类路径下扫描并发现带有特定注解的组件&#xff0c;支持诸如ComponentScan、Component、Service、Repository和Controller等注解的自动扫描和注册。 ClassP…

2024硬核对比内衣洗衣机:dailyneaty、希亦、觉飞大pk

内衣和贴身衣物的面料通常比较柔软和脆弱&#xff0c;如果和其他衣物混洗&#xff0c;可能会因摩擦和拉伸等原因导致面料损坏、变形或者开线&#xff0c;而内衣洗衣机可以采用低速旋转、柔和的清洗方式&#xff0c;避免这种情况的发生&#xff0c;因此&#xff0c;内衣洗衣机可…

C#,数值计算,希尔伯特矩阵(Hilbert Matrix)的算法与源代码

Hilbert, David (1862-1943) 1 希尔伯特(Hilbert) 德国数学家,在《几何学基础》中提出了第一套严格的几何公理(1899年)。他还证明了自己的系统是自洽的。他发明了一条简单的空间填充曲线,即埃里克魏斯汀的数学世界,即希尔伯特曲线,埃里克魏斯汀的数学世界,并证明了不…

Linux 建立链接(ln)

目录 1、ln命令 创建软链接&#xff1a; 创建硬链接&#xff1a; 2、输出重定向&#xff08;>/>>&#xff09; 3、管道&#xff08;|&#xff09; 1、ln命令 &#xff08;英文全拼&#xff1a;link files&#xff09;为某一个文件在另外一个位置建立一个同步的…

实践致知第9享:Word中标题编号无法正常编辑

一、背景需求 在编辑文档时&#xff0c;多级目录结构却无法正常编辑。 二、解决方案 1右键选择“项目符号和编号”查看是否上下文中的编号格式都保持一致&#xff0c;如下图所示。 2当调整到同一种样式之后&#xff0c;用格式刷刷一下需要编辑的标题&#xff0c;先刷成同级别…

自动化运维工具Ansible

目录 一.Ansible基本内容 1.定义 2.特点与优势 优势&#xff1a; &#xff08;1&#xff09;轻便性&#xff1a;无需在被控制服务器上安装客户端&#xff0c;Ansible基于ssh协议 &#xff08;2&#xff09;幂等性&#xff1a;大部分模块有幂等性&#xff0c;即如果输入sys…

【LeetCode热题100】24. 两两交换链表中的节点(链表)

一.题目要求 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 二.题目难度 中等 三.输入样例 示例 1&#xff1a; 输入&am…