Integer移位算法

news2024/11/17 9:52:48

常用移位算法

  • 给定值最高位1的权重
  • 给定值最低位1的权重
  • 给定值高位连续零的个数
  • 给定值低位连续零个数

给定值最高位1的权重

也就是给定值左侧。返回给定值左侧最大的2的次幂
在这里插入图片描述

//获取i最高位1代表的2次幂,最高位1代表的权值
 public static int highestOneBit(int i) {
        // HD, Figure 3-1
        i |= (i >>  1);//将第二高位置1
        i |= (i >>  2);//将第二高位之后的两位置1
        i |= (i >>  4);
        i |= (i >>  8);
        i |= (i >> 16);//所有位都置1了
        //此时的如果i+1就是i右侧最小的2次幂(HashMap)
        return i - (i >>> 1);//i左侧最大的2次幂
    }

给定值最低位1的权重

在这里插入图片描述

//获取i最低位的1所代表的值,即最低为位1代表的2的次幂。-i是i各位取反之后,加1。
// i=  1 1 0 0 1 0 1 0
//-------------
//-i=  0 0 1 1 0 1 1 0
//10,最低位1代表的值。
public static int lowestOneBit(int i) {
        // HD, Section 2-1
        return i & -i;
    }

计算整数的二进制表示中1的个数:通过多次执行 i = i & (i - 1),可以计算出一个整数中1的个数。每次执行 i & (i - 1) 操作,都会将 i 的最低位的1置为0,直到 i 变为0为止。


判断一个整数是否是2的幂:如果一个整数 i 是2的幂,那么它的二进制表示中只有一个1。通过执行 i & -i 操作,如果结果为 i,则表示 i 是2的幂;否则,表示 i 不是2的幂。


找到数组中唯一出现一次的元素:如果数组中除了一个元素外,其他元素都出现了两次,可以通过执行异或操作来找到唯一出现一次的元素。而执行异或操作的依据就是 i & -i 的结果。

给定值高位连续零的个数

最高位1前面连续零的个数。二分法:先看高16位
在这里插入图片描述

public static int numberOfLeadingZeros(int i) {
        // HD, Figure 5-6
        if (i == 0)//如果是0,32位全零
            return 32;
        int n = 1;
        /**无符号右移16位,如果等于0,高16位全零拿n+=16,再看低16位
        * i左移16位,推掉了高16位;低16位覆盖高16,此时对这16位折半,就右移
        * 24位,剩下的是原数的低16位的前8位,如果等于0,前24位都是0,n+=8。
        * i左移8位,低8位放到了最高位。对原数的低8位折半,右移28位,低8位的高四位,
        * 全0,前面28位都是0,n+=4。再看低4位,左移4位,低四位放在最高位上。折半,
        * 左移30位,剩下的是低四位的高两位,全零,前30位都是0,则n+=2。再看最低两位
        * 左移两位,最低两位在最高位上。折半,左移31,剩下最低位了,如果为0,不用计算
        * 一看是n=1就默认最低为0,计算过了。如果为1,那就计算多了所以-1
        */
        if (i >>> 16 == 0) { n += 16; i <<= 16; }
        if (i >>> 24 == 0) { n +=  8; i <<=  8; }
        if (i >>> 28 == 0) { n +=  4; i <<=  4; }
        if (i >>> 30 == 0) { n +=  2; i <<=  2; }
        //折半,左移31,剩下最低位了,如果为0,不用计算,一开始n=1就默认最低为0,
        //计算
        //过了。如果为1,那就计算多了所以-1
        n -= i >>> 31;
        return n;
    }

给定值低位连续零个数

 public static int numberOfTrailingZeros(int i) {
        // HD, Figure 5-14
        int y;
        if (i == 0) return 32;
        int n = 31;
        y = i <<16; if (y != 0) { n = n -16; i = y; }
        y = i << 8; if (y != 0) { n = n - 8; i = y; }
        y = i << 4; if (y != 0) { n = n - 4; i = y; }
        y = i << 2; if (y != 0) { n = n - 2; i = y; }
        return n - ((i << 1) >>> 31);
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

轻量化技术 | 大面积模型秒加载、TB级数据处理能力、多平台便捷展示应用...

实景三维技术的发展日新月异&#xff0c;但在应用上却一直无法深入&#xff0c;尤其是在大场景三维模型展示与应用过程中&#xff0c;不可避免地会遇到占内存、渲染慢、加载卡顿、模型塌陷等情况&#xff0c;这是由于数据格式类型多、内存占比大、模型体量大。 对此&#xff0…

C++ STL关联式容器和无序容器(哈希容器)

文章目录 5.2 C STL关联式容器5.2.1 C STL map容器5.2.2 C STL multimap容器5.2.3 C STL set容器5.2.2 C STL multiset容器 5.3 C STL无序容器&#xff08;哈希容器&#xff09; 参考 5.2 C STL关联式容器 关联式容器在存储元素值的同时&#xff0c;会为各元素额外再配备一个值…

让你不再疑惑PDF转Excel怎么操作

你是否曾经遇到过需要编辑PDF表格的情况&#xff0c;但却不知道如何进行转换&#xff1f;不用担心&#xff0c;现在有一些简单的方法可以将PDF表格转换为Excel&#xff0c;让你轻松地编辑和修改表格。如果你还不知道PDF表格转Excel怎么转的话&#xff0c;那么接下来三种实用的小…

摆脱传统模式,快速构建系统只需要7步~

摆脱传统模式&#xff0c;快速构建系统只需要7步~ 首先我们来说说用“低代码开发平台”来进行开发是一种怎样的感受&#xff1f;它可以帮助您更快、更可靠地提供价值。通过在可视化设计器中&#xff0c;以拖拽的方式快速构建应用程序&#xff0c;您可以跳过基础架构以及可能会让…

聚观早报 | TikTok首席运营官离职;AMDR7 7840HS轻薄本开始上市

今日要闻&#xff1a;TikTok首席运营官离职&#xff1b;AMDR7 7840HS轻薄本开始上市&#xff1b;美国5月AI招聘岗位增加约20%&#xff1b;荷兰传最收紧ASML对华出口限制&#xff1b;力斯SERES5完成欧洲首批交付 TikTok首席运营官离职 当地时间 6 月 22 日&#xff0c;TikTok 首…

LangChain 基于 Prompts 提示管理 构建特定领域模型

一、langChain Prompts 上篇文章对 langChain 进行了简单的介绍与使用&#xff0c;可以知道LangChain 是一个由语言模型LLMs驱动的应用程序框架&#xff0c;使用 LangChain 可以极大的降低开发成本&#xff0c;本篇文章主要基于 LangChain 中的 Prompts 提示管理实现特定领域的…

【软件设计师暴击考点】知识产权高频考点暴击系列

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

Linux conda 环境迁移 服务器之间在线迁移

网上很多方法语焉不详&#xff0c;本文章主要介绍conda list方式进行Linux系统在线环境迁移&#xff0c;迁移完毕后需要手动安装缺失的python库&#xff0c;负责环境不推荐此种方式迁移。 在Linux系统之间进行单一环境迁移&#xff1a;从服务器A迁移到服务器B 服务器A&#xf…

磷酸铁锂电池应用前景广阔,英集芯响应市场推出IP2366电源管理芯片

正极材料是锂电池的核心材料之一&#xff0c;其性能直接影响锂电池的能量密度、安全性、寿命和应用等&#xff0c;占电池总材料成本中的比例超过30%。目前行业内常见的锂离子电池正极材料主要可分为磷酸铁锂&#xff08;LFP&#xff09;、三元材料&#xff08;NCM、NCA&#xf…

使用全志方案遇到glibc库版本低以及编译报错的解决方法

Glibc 包含了linux一些主要的C库&#xff0c;用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等&#xff0c;在遇到glibc库版本低编译还报错的情况时&#xff0c;遵循以下步骤解决 参考文章&#xff1a;如何编译glibc库 make工具 注意由于AW…

Flask基础及常见问题整理

一、Flask框架介绍 使用python开发后端&#xff0c;目前主流的框架就是Flask和Django。其中&#xff0c;Flask是一款轻量级的Python web框架,有以下主要特点: 1. 简单易用 Flask很简单易用&#xff0c;可以快速上手开发web应用。它只依赖Werkzeug和Jinja2两个库&#xff0c;…

Uniformer 训练心得

这是我配环境进行训练的第一个程序&#xff0c;遇到了很多问题&#xff0c;在这里总结一下 首先是配环境 按照官方代码进行配&#xff0c;我跑的是uniformer中的object detection 官方github 在这里我遇到的问题 配mmdetection时总是代码有标红错误&#xff0c;注意&#xf…

卡萨帝:领跑者的代价和陪跑者的聪明

一台设备可以卖1.2亿欧元&#xff0c;而世界上只有一家公司可以生产&#xff1b;占据市场80%份额&#xff0c;在高端光刻机领域处于垄断地位&#xff1b;看不见任何竞争对手。 看完这几个信息&#xff0c;相信有些人已经猜到是何方神圣了&#xff0c;这正是荷兰的光刻巨人ASML…

为什么单击并按住标题栏,程序运行得更快?

有时候&#xff0c;人们会发现这样一个怪异现象&#xff1a;如果在执行一项长时间运行的任务的时候&#xff0c;在标题栏按下鼠标&#xff0c;这个时候&#xff0c;会发现程序运行的更快了一些。 这件奇怪的事情通常是发生在这样一种场景&#xff1a;当程序花费太多时间更新其…

手机录屏录音不用愁,这些方法无需ROOT就能内录声音!

现在不少人喜欢用视频分享生活&#xff0c;除了外拍视频&#xff0c;或多或少也有需要内录视频的时候&#xff0c;比如录个操作步骤啊、游戏视频啊&#xff0c;或者录个网课、录首歌啥的… 之前也有不少粉丝留言问过我这个问题&#xff0c;所以今天就打算来和大家简单分享一下…

JSP自定义标签【上】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于自定义标签的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.什么是标签 二.什么是自定义标签…

国产骨传导耳机哪个牌子好,分享几款表现不错的国产骨传导耳机

骨传导耳机是一种新兴的耳机技术&#xff0c;其原理是将声音转化为不同频率的机械振动&#xff0c;通过人的颅骨、骨迷路、内耳淋巴液、螺旋器、听觉中枢来传递声波&#xff0c;不通过鼓膜&#xff0c;不入耳&#xff0c;不影响耳朵的听觉。听音乐是人们生活中不可缺少的一部分…

二叉树OJ题:LeetCode--965.单值二叉树

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下LeetCode中第965道二叉树OJ题&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; 数据结构与算法专栏&#xff1a;数据结构与算法 个 人…

python旅游推荐系统-计算机毕设 附源码82884

旅游推荐系统 摘 要 随着社会的快速发展和人们生活水平的不断提高&#xff0c;旅游已逐渐成为人们生活的重要组成部分&#xff0c;用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时&#xff0c;也淹没了用户真正感兴趣的信息。为…

二十三种设计模式第十一篇--桥接模式

好久没写博客了&#xff0c;自从进入6月份&#xff0c;毕业季&#xff0c;全是在忙毕业的事情&#xff0c;都没怎么学习代码软件工程知识了&#xff0c;这二十三种设计模式还是得学完哈&#xff01;持之以恒&#xff0c;我本来为了学这二十三种设计模式的初衷是为了顺利度过软考…