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

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

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

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的时候比较有用。

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

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

    推荐阅读
  • 兰亭序的序 是多音字吗(兰亭序偏旁部首)

    竖的起笔平头,没有斜角顿笔,说明落纸后,笔法先右挫锋铺毫,驻出右角,在调锋向西,用笔略提,带左弓势,然后略向右下斜,用笔逐渐加重。第二个“将”字的“丬”部点画粗细不一样。繁体简写,将横折横、竖折、横省略为两点,更加灵动美观。“门”字的写法上繁体字的行书画写法,用笔上较复杂。第二笔先由左向右平行落纸铺毫,在挫锋向下,用笔略重,借势向上出锋。

  • 如何辨别匡威鞋(如何分辨真假匡威经典鞋)

    ,我来为大家讲解一下关于如何辨别匡威鞋?一看吓一跳,匡威女孩快收藏!匡威这个品牌其实也有很多年了,之前一直都没有火,在最近这些年被炒的非常火,有很多人都去买。最后就是鞋垫了,先拿正面的鞋垫来说,真匡威稍微有点泛黄色,而假匡威的颜色会非常白,一眼就能够看出来。然后再拿背面的鞋垫来说,真匡威是纯黑色的,不管放在哪里都是这样的。生活品质,高帮,真假匡威,鞋子,时尚,匡威,衣服,鞋靴

  • 济宁中考满分多少分(济宁中考满分是几分)

    下面希望有你要的答案,我们一起来看看吧!济宁中考满分多少分总分610分。各科目分值:语文100分;数学100分;英语100分;物理、化学合场110分;道德与法治60分;历史50分;;物理、化学实验操作10分;信息技术20分;体育60分;总分610分。

  • 马士基公司船队规模(货代与船司之争)

    货代与船司之争马士基终止了与DBSchenker的协议据悉,主要原因是,在9月份马士基宣布将Damco品牌于2020年底前退出市场,之后不久,物流货运代理DBSchenker便开始动手抢客户,向Damco的客户发出。

  • 拔完智齿后怎么避免得干槽症(智齿拔完后为什么会出现)

    没那么简单,小心拔完牙齿后干槽症找上身。目前认为干槽症是牙齿拔除后由口腔细菌所引起的骨创感染。而在愈合过程中,如果凝血块脱落或者感染,就可能导致干槽症。多发生于下颌智齿拔除后。

  • 如果口供说谎造成什么罪?(口供说的谎话可以定罪吗)

    构成诬告陷害罪;口供一般专指犯罪嫌疑人或被告人的供述,犯罪嫌疑人的口供,仅起配合性作用,还是要结合实质性证据才能定案。国家机关工作人员犯前款罪的,从重处罚。(一)诬告陷害罪的客体要件本罪侵犯的客体是他人的人身权利和司法机关的正常活动。有一种观点认为,捏造他人一般违法事实的也构成诬告陷害罪,不同意这种观点。

  • 绿叶朱蕉养殖方法(绿叶朱蕉养殖方法简述)

    绿叶朱蕉养殖方法绿叶朱蕉生长适温为20~25℃,夏季白天可25~30℃,冬季夜间温度7~10℃。不能低于4℃,个别品种能耐0℃低温。绿叶朱蕉对水分的反应比较敏感。茎叶生长期经常喷水,以空气湿度50%~60%较为适宜。绿叶朱蕉对光照的适应能力较强。夏季中午适当遮荫,减弱光照强度,对朱蕉叶片生长极为有利。绿叶朱蕉的种植土壤以肥沃、疏松和排水良好的砂质壤土为宜,不耐盐碱和酸性土。

  • 承担民事责任的年龄是多大(刑事责任呢)

    我们一起去了解并探讨一下这个问题吧!承担民事责任的年龄是多大民事责任方面:民法规定年满18周岁的自然人都具有民事行为能力的,年满16周岁但是未满18周岁但是也自己的收入为其生活来源的也算是完全的民事行为能力人。刑事责任方面:14岁是刑事责任能力的界限。14岁以下的人触犯刑法不承担刑事责任。14至16岁承担部分罪名的刑事责任。

  • 床上静电太多怎么办(床上静电太多怎么解决)

    使用衣物柔顺剂。衣物柔顺剂具有抗静电、柔顺衣物的作用,床单被套有静电,可以使用衣物柔顺剂帮助去除上面的静电,还能帮助床单的柔顺感,帮助增加亲肤体验。床单被套有静电很有可能是因为织物材质原因引起的,在床单织物的选择上建议选择纯棉质地,棉质床单质地更为柔软,也更加不易起静电,所以,日常床单的选择建议使用纯棉质地。

  • 易经思维和玄学的关系(认知的角度与深度)

    但不管是《大学》还是《中庸》其目的都是共同的。云门禅师说他的一句偈语具有三层内涵,涵盖乾坤、随波逐流、截断众流。从《易经》角度来看,事物的表象是千变万化的,是一直在变易的,而事物的真相是不变。第五个层次,要坚持自己的思想,不要为他人左右。5《易经》睽卦上九:睽孤。见豕负涂,载鬼一车。先张之弧,后说之弧。看见母猪在哺乳,一辆装满死尸的车。不是盗寇的婚姻。这个词的概念和中国“天人合一”的概念有关。