找到一个数最接近的比它大的2的n次幂的代码分析

news/2024/12/22 9:17:26/文章来源:https://www.cnblogs.com/binliexc/p/18444845
pub fn f1(mut n: u32) -> u32 {n = n | (n >> 1);n = n | (n >> 2);n = n | (n >> 4);n = n | (n >> 8);n = n | (n >> 16);n
}

  如果n的输入类型为 u32(32位无符号整型), 上述代码的结果为大于等于n的2^k - 1的值(因为可能会出现溢出,所以并没有直接返回2^k),二进制表现为从最高有效位开始全为 1例:n = 00001010, 则返回值的二进制为 00001111。如果是 u64,只需在函数里再加上 n = n | (n >> 32)。以下是我对于上述代码的理解。

  我们思考代码如何运行的时候,只需要记住,原n的二进制的最高有效位是关键,其它位置不重要。假如 n = 17, n 的 u8 二进制为 00010001,运行上述代码会返回 31,二进制为 00011111。

  

  在执行n = n | (n >> 1) 时,目的是让前 2 位最高有效位变为 1, 

  

 

  在执行n = n | (n >> 2) 时,目的是让前 4 位最高有效位变为 1, 

  

  根据以上规律,代码执行到返回的结果就是从最高有效位开始,所有位数的值都为1,结束!

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

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

相关文章

《如 何 速 通 一 套 题》8.0

邮寄 开场秒 B。 A 稍微退了一会儿,推出一个解法(后面发现假掉了)...... 然后 CD,D 感觉是一个 SA。结果 SA 写错了,算法假掉了...... A 智乃的差分 分类讨论。 \(x > 0\) 最大值 \(= x\),最小值 \(= 0\) 此时可以直接找一个不是 \(x\),不是 \(0\) 的数来(严格次小值…

Orchestre symphonique de Montréal,Rafael Payare - 马勒:第五交响曲(2024)

Orchestre symphonique de Montréal,Rafael Payare - 马勒:第五交响曲(2024)[Hi-Res 96kHz_24bit FLAC] 曲目:01.I. Trauermarsch. In gemessenem Schritt. Streng. Wie ein Kondukt.02.II. Stürmisch bewegt. Mit gröter Vehemenz03.III. Scherzo. Kräftig, nicht …

信息学奥赛复赛复习09-CSP-J2020-03表达式求值前置知识点-中缀表达式求值、摸运算、模运算性质、栈

PDF文档公众号回复关键字:20241002**1 P1981 [NOIP2013普及组] 表达式求值 ** [题目描述] 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值 [输入格式] 一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 “+” 和乘法运算符 “”,且没有括号,所有…

文件

一个文件会对应一个inode软硬链接有什么区别:是否具有独立的inode!! 软连接具有独立的inode--可以被当作独立文件看待。 硬连接没有独立的inode--就是链接前的inode编号。建立硬链接,根本就没有创建新文件,因为没有给硬链接分配独立的inode。既然没有创建文件,那么一定没…

模拟赛总结(二)

2024.8.1 T1 集合(mex.cpp) 枚举每个数,求他是\(mex\)的概率,就是取完比他小的,比他大的随便取的方案数比上总方案数 code T2 取模(mod.cpp) 有点套路 定义:\(odd\)为奇数,\(even\)为偶数,\(num_{odd}\)或者\(t\)为奇数个数 那个下取整可以变为: \[\begin{cases}& \…

重生之我要做商城 - 萌音商城V1.0上线

萌音系列的第N+1个项目来了呢. 这其实又是一个鸽了好几年的项目了,这回总算能把坑填上了. 先上项目地址: https://MoeKoe.cn 我为什么一直在做项目? 这个问题就很有意思了,为什么一直在做各种项目,而且还是不挣钱的东西. 接触过我之前一些项目的小伙伴都知道我开发什么项目都是…

【转戴】Redhat与Debian系介绍(Linux各种发行版本概述)

Linux,最早由Linus Benedict Torvalds在1991年开始编写。在这之前,Richard Stallman创建了Free Software Foundation(FSF)组织以及GNU项目,并不断的编写创建GNU程序(此类程序的许可方式均为GPL: General Public License)。在不断的有杰出的程序员和开发者加入到GNU组织中…

吐槽随笔

2024/10/02 好不容易有时间打一次洛谷月赛,结果却让我输的这么彻底!

【动态Web API学习(三)】动态方法

1.应用程序模型 ASP.NET Core MVC根据控制器、操作、操作参数、路由和筛选器的结果,定义模型如下: ApplicationModel、控制器(ControllerModel)、操作(ActionModel)和参数(ParameterModel)。上一节中只是告诉系统封哪个是控制器,还要为控制器模型初始化值,比如路由、…

关于Arch Linux 安装及一些相关问题总结

关于个人Arch Linux 安装及相关问题总结 0. 其它记得在pacstrap前换国内的源 不会有人和我一样没换等半天还不成功吧 😦交换分区开大一点,照着Windows下开(看taskmgr里面的缓存空间),比如4G的RAM就要开10G的swap,swap越大越不容易卡死,安装时用swapon启用你刚建的swap…

深度学习(可视化卷积核)

可视化卷积核参数对理解卷积神经网络的工作原理、优化模型性能、提高模型泛化能力有一定帮助作用。 下面以resnet18为例,可视化了部分卷积核参数。import torchvision from matplotlib import pyplot as plt import torchmodel = torchvision.models.resnet18(pretrained=True…

《痞子衡嵌入式半月刊》 第 108 期

痞子衡嵌入式半月刊: 第 108 期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《…