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

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

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

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

    推荐阅读
  • 菠萝咕咾鸡肉怎么做最好吃(菠萝咕咾鸡肉如何做最好吃)

    菠萝咕咾鸡肉怎么做最好吃材材:鸡脯肉200克、菠萝1/4个、红椒1个、青椒1个、葱1棵、生姜3片、食用油适量、玉米淀粉适量、食盐适量、鸡蛋1个、白胡椒粉少许、番茄酱3勺、白糖2勺、白醋1勺、料酒1勺。鸡脯肉切片,加入白胡椒粉,食盐,料酒和玉米淀粉拌匀,腌制10分钟。菠萝切小块,青红椒切,葱切碎,生姜切丝。锅里倒入适量的油烧热后,放入鸡脯肉炸至金黄色,捞出沥干油份备用。倒入鸡脯肉翻炒均匀。

  • 原告向检察院要求被告赔偿怎么写(被告赔偿如何写)

    原告向检察院要求被告赔偿怎么写?跟着小编一起来看一看吧!附带民事诉讼被告人,男,汉族,19年月日出生,住市区镇村号,公民身份号码。现羁押于市看守所。此致市区人民法院具状人:2019年月日

  • 二九年华是什么意思(二九年华指十八岁)

    二九年华是什么意思“二八年华”有寓意,古时用二八代表十六岁,以此类推,如二九代表十八岁。二八年华是用来比喻人最美好的青春时代。12岁(女)——金钗之年;13岁(女)——豆蔻年华,15岁(女)——及笄之年;16岁(女)——破瓜年华、碧玉年华,二八年华;20岁(女)——桃李年华;24岁(女)——花信年华。

  • 天资聪颖的意思是什么(天资聪颖的造句)

    我们一起去了解并探讨一下这个问题吧!不过霍元甲天资聪颖,毅力惊人,功艺长兄亢进,在兄弟之中出类超群。杜十娘自幼生于富贵之家,因体弱多病,天资聪颖,故痴迷权谋智略,以欺凌异性为乐,期间常伴有鬼畜手段。康熙登基时,赵执信刚出生,但他天资聪颖,“九岁捉笔为文,辄以奇语惊其长老”。

  • 盛情难却表示是什么意思(盛情难却解释)

    下面更多详细答案一起来看看吧!盛情难却表示是什么意思盛情难却,汉语成语,拼音是shèngqíngnánquè,意思指浓厚的情意难以推辞。出自高阳《胡雪岩全传·平步青云》上册:为了盛情难却,王有龄跟着去了。

  • 陈键锋演过什么电视(陈键锋经典影视角色盘点)

    ,现在小编就来说说关于陈键锋演过什么电视?下面内容希望能帮助到你,我们来一起看看吧!

  • 云顶之弈手机版装备(这些装备你都了解吗)

    接下来我们就一起去研究一下吧!云顶之弈手机版装备无尽之刃:+40攻击,同时提供200%的暴击伤害。神圣之剑:+20攻击力,+20%攻速。每秒会增加英雄5%暴击率,最大获得100%暴击率。科技枪:+20攻击力,+20%魔法伤害,25%的技能吸血。朔极之矛:+20攻击力,+20法力值,释放技能后,普攻回复自身25%的法力值。基克的先驱:+20攻击力,+200生命值,邻近格子的友军获得20%攻击速度。复活甲:+20攻击力,+20护甲,复活时回复300HP。

  • 仙剑奇侠传三蜀山第一层怎么走(细说蜀山故道过关攻略)

    今天我们说说蜀山故道这个迷宫的过关攻略!我们需要先将迷宫划分一下,蜀山故道分为一层和二层。第一层蜀山故道主要由七个行道构成。第二层蜀山故道相对来说比较简单,但是比较耗费时间。只有将四个浮空岛上的石球机关全部打开,顶部石门才会自动破碎。但实际上可以看出设计迷宫的人非常的有趣。那么过了蜀山故道二层最终将来到蜀山故道顶层,这里有通往蜀山派的传送门。下一期细说蜀山上的故事!

  • 平面模特是怎么练习的(怎样做好平面模特)

    (怎么脸这么大!!我们还没有开设模特入行之前,也听说过很多朋友被这样的公司欺骗,找到我们之前也有好多好多学员都被骗了,因为你交了钱以后,他帮你咔咔咔几张照片就消失了。并不说一定要签公司才能做模特,因为现在有很多独立经纪人,但相对签公司来说来说,公司会有一定保证。有些人对模特这一行有些误解,但说实话,各行各业都有他的潜规则,模特行业靠自己的实力年入百万千万的也不是没有的哦。

  • 北华大学简介(关于北华大学简介)

    学校为全国首批“卓越医生教育培养计划”和“卓越农林人才教育培养计划”改革试点高校、国家级大学生创新创业训练计划实施院校、国家大学生文化素质教育基地、首批全国高校实践育人创新创业基地、教育部来华留学示范基地建设高校、中国政府奖学金来华留学生接收院校、中俄医科大学联盟首批成员高校,CDIO工程教育联盟成员单位、吉林省人民政府和国家林业局合作共建高校。