科百科
当前位置: 首页 范文大全

掌握java运算符的心得(Java中关于位运算的一些小技巧)

时间:2023-05-28 作者: 小编 阅读量: 3 栏目名: 范文大全

Java中关于位运算的一些小技巧力扣知识预备位运算基础知识原题给你一个非负整数num,请你返回将它变成0所需要的步数如果当前数字是偶数,你需要把它除以2;否则,减去1示例1:输入:num=14输出:6解释:步骤1)14是偶数,除以2。

掌握java运算符的心得?力扣位运算基础知识,今天小编就来聊一聊关于掌握java运算符的心得?接下来我们就一起去研究一下吧!

掌握java运算符的心得

力扣

知识预备

位运算基础知识

原题

给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

示例 1:

输入: num = 14 输出: 6

解释:

步骤 1) 14 是偶数,除以 2 得到 7 。步骤 2) 7 是奇数,减 1 得到 6 。步骤 3) 6 是偶数,除以 2 得到 3 。步骤 4) 3 是奇数,减 1 得到 2 。步骤 5) 2 是偶数,除以 2 得到 1 。步骤 6) 1 是奇数,减 1 得到 0 。

示例 2:

输入: num = 8 输出: 4

解释:

步骤 1) 8 是偶数,除以 2 得到 4 。步骤 2) 4 是偶数,除以 2 得到 2 。步骤 3) 2 是偶数,除以 2 得到 1 。步骤 4) 1 是奇数,减 1 得到 0 。

示例 3:

输入: num = 123 输出: 12

提示:

0 <= num <= 10^6思考探究

经过研究,其中其实隐藏了规则

    如果这个数字是2的n次方,那么他的题目步数其实就是log2(log2为底),也就是求这个n是多少。如果不是2的n次方,那么其实就只能按照常规方案计算,奇数减一,偶数除2。为了运算正常,其中会有大量的取模运算,为了判断是技术还是偶数

那么这里我考虑到这里就非常适合使用位运算来计算,可以解决2个需要运算耗时的地方

    Q: 判断数字是不是2的n次方,只有等于了才能去计算这个n是多少

A:使用 (num & (num - 1)) == 0 来判断是否是2的n次方

因为如果数字是2的n次方,那么他的二进制必然是类似 00010000,只会存在一个1,然后num-1 就会变成 00001111,两边通过&运算,一定是没有相同的1,所以结果一定为0,就可以判断是否是2的n次方。

假设 num = 16:

16&16-1 = 00010000 & 00001111 = 0 ✅

假设 num = 15:

15&15-1 = 00001111 & 00001110 = 14 ❌

Q:对当前数字取模,判断是奇数还是偶数?

A: 使用(num & 1) == 0 判断是奇数还是偶数,相当于替换 num % 2 == 0 。这里的原因其实是判断奇数还是偶数的核心就是数字二进制的最后一位是什么,如果是奇数,一定是1。

那么判断奇数偶数的问题就转变成了判断二进制最后一位是0还是1的问题。

这样通过二进制的 & 操作就可帮助我们快速判断是基数还是偶数。

假设 num = 16:

16&1 = 00010000 & 00000001 = 0 ✅

假设 num = 15:

15&1 = 00001111 & 00000001 = 1 ❌

实践样例代码

public int numberOfSteps(int num) {int count = 0;while (num != 0) {if ((num & (num - 1)) == 0) {double v = Math.log(num) / Math.log(2);return (int) v1count;}//偶数if ((num & 1) == 0) {num = num / 2;count;}//奇数if ((num & 1) != 0) {num = num - 1;count;}}return count;}

结果

执行效率和内存还是很不错的,执行时间约等于1ms,内存使用率低于百分之97的java提交,对比与官方题解,我这种方案认为也还可以。

结尾

按照上述的方案就是针对位运算的一点小技巧,因为其实在常规的开发中,我们其实是不太会用位运算,原因我大概理解为以下几个

    阅读位运算代码成本较高业务上还不至于在这种细节点扣位运算代码书写不够熟练

但个人理解,如果能一点一点开始位运算的话,可以在需要的时候尽可能的增加计算效率并且做leetCode的时候比较有用。

作者介绍某大厂高级软件工程师,代码爱好者定期分享技术相关,热点实时,计算机实用技巧有问题可在评论区回复或者联系我,用专业,程序员的思维带给你不一样的认知

欢迎点赞,关注博主,未来会有更多知识解答,有问题可以评论区讨论,尽全力帮大家解答。

    推荐阅读
  • 英语四级语言听力技巧(英语听力技巧和方法)

    记有两种形式,一是用脑记,二是用手记。因此,训练作笔录能力大有好处。应充分抓住这段时间,速读选项,预测内容,从而做到心中有数。在四级听力测试的题目中,有关原因及结果或是引起与被引起的关系比重很大,若是考生对此类问题加强认识,则对提高听力大有裨益。另外,表达先后顺序通过时态上也可体现出因果关系。

  • 证件照怎么免费换底色(不管你什么行业)

    最近一个朋友大四毕业了准备去工作,面试了几个工作终于准备上班了,他公司要他提供一个白底的证件照和一个蓝底的证件照电子版,刚好我朋友只有红底的证件照电子版,他本来想去摄影棚修改下,摄影棚的说改底色可以一张10元,有点小贵,他在网上看到很多证件照换底色的工具,一般都是3--5元直接快速转换,因为我是做it的,于是我朋友就问我能不能帮他转一证件照底色,与其给网上转换几元钱不如让我帮弄好,把钱给我,如果我

  • 怎样做果冻好吃又简单(想吃果冻不用买)

    现实中这样的果冻真的不少,品种甚是丰富。当牙齿碰到果冻,稍微吮吸,脂香味十足。尤其是后一种,果冻中有添加各种水果粒,一股水果香味深得小朋友的喜爱。这种果冻的做法是来自于凉粉的灵感。这种果冻制作相对简单,无任何副作用食材添加,对于喜欢吃果冻的小孩来说是值得推荐的。准备一个碗,将火龙果轻轻一碰,果肉自动分离,掉进碗里。②起锅,倒入清水,白糖和白凉粉,搅拌至完全溶化。

  • 温柔小众吃鸡名(吃鸡五字好听的名字)

    酿一坛清醒尝一口甜筒,我来为大家科普一下关于温柔小众吃鸡名?以下内容希望对你有帮助!

  • 衡阳驾驶证换证在哪里办理?(衡山驾驶证换证地址)

    业务成功受理后,如果选择邮政寄递的,邮政人员将上门收取费用,交付机动车驾驶证及收费票据。如果选择窗口自取的,则自行到选择的自取网点窗口领取机动车驾驶证。

  • 2022百里杜鹃风景区最佳观赏期(在国内首个簕杜鹃科普馆)

    2020年12月31日,首届簕杜鹃品种跨年展在深圳簕杜鹃谷公园举办。本次活动由深圳市宝安区航城街道办事处、深圳市花卉协会、深圳市簕杜鹃研究会、深圳市宝安区航城街道市政建设工程事务中心、深圳市宝安区航城街道党建服务中心主办,簕杜鹃科普馆承办,将持续到2021年1月18日。据了解,承办此次展会的簕杜鹃科普馆位于凤凰山森林公园三期簕杜鹃谷内,为岭南风格两层式建筑,是目前我国首个以簕杜鹃为主题的科普馆。

  • 暗黑破坏神3如何提取传奇威能(暗黑3提取传奇威能后装备不见了)

    就如同暗黑破坏神2中赫拉迪克方块一样,本作中有一个名为卡奈魔盒的道具可以为角色提供各种各样的功能,本篇文章将详细介绍其中提取传奇威能的功能。收集够所有材料后,把需要提取威能的装备放入魔盒,之后点击放入材料,点击重塑,就提取成功了,选定使用就可以了。

  • 绍兴景区本地人免票吗最新消息(绍兴人凭身份证免费或优惠玩转这些景区)

    2月8日至3月7日,2018年杭州都市圈新春优惠月启动。歌斐颂巧克力小镇:即日起至2月14日,嘉兴地区居民免门票,浙江地区居民半票。湖州大美下渚湖湿地颇具野趣湖州在这次2018年新春优惠月活动中特惠力度非常大,全市的41家旅游企业,总价值优惠达到760.52万。下渚湖的自然植被葱郁,有大量野生鸟类禽类繁衍生息,与湿地原生态共同呈现“细雨鱼儿出,微风燕子斜”美景,令人赞叹不已。

  • 欧盟猪肉出口放缓(欧洲最大猪肉出口国)

    猪肉出口量自七月创新高以来,在八月减少了近四分之一,达到18万公吨。这是自二月以来的最低水平,但仍比年初之前任何一个月的记录都要高,与去年八月相比,高出了27%。尽管对中国的销量仍高于去年水平,但却是欧盟出口量减少的主要缘故。