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

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

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

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

    推荐阅读
  • 结婚十年和十周年的区别(结婚十周年是什么婚)

    小俊带大家看看,我来为大家科普一下关于结婚十年和十周年的区别?表示着婚姻看似柔软却在历经风雨后仍然坚不可摧。锡婚的谐音是“惜婚”,也是在告诉夫妻双方要珍惜现在的幸福的家庭。

  • 天猫超市返现卡过期了怎么办(关于天猫超市返现卡过期了处理方法)

    下面希望有你要的答案,我们一起来看看吧!天猫超市返现卡过期了怎么办进入淘宝,选择天猫超市进行购买时,新人购买时,都会有返现任务,只要在活动时间,进行下单,根据要求完成就可以获得。当然如果出现失效的情况,一般还有有活动都有优惠可以在领。如果觉得天猫超市的商品都不错,可以通过充值的方式,也可以获得返现。返现比较多是在于还没有购买过的新人,如果买过几次之后,需要等其他不一样的活动参与。

  • 武汉什么时候恢复火车运营(明起湖北多地武汉火车恢复通行)

    3月28日上午8时襄阳东→汉口的G6860次高铁车票已在12306网站公开发售这趟列车将是襄阳三大车站恢复运营后首趟始发开往武汉的高铁。不过,襄阳东出发前往北京、上海、烟台等城市的火车票依然暂未开售。宜昌为做好旅客出行工作,满足复工复产需要,自3月28日起,汉宜铁路将开行旅客列车。孝感3月28日起,孝感东站正式恢复客运业务。据悉,3月28一4月9日期间,孝感东站将开行由汉口始发的三趟列车,现已开始网上售票。

  • 极蜂对讲机212 评测(极蜂推出超薄对讲机A306)

    极蜂超薄对讲机A306整机外观为黑色,外壳为坚硬的塑料材质,像在户外使用能够起到耐磨、防摔的作用。同样是鲜艳配色的按键,顶部的这个其实是频道波动按钮,极蜂超薄对讲机A306共有20个频道可供切换。相信这里有人会说,无线电通信是有严格的规定和要求,如果没有任何许可私自使用是属于违法行为,这一点倒是不用担心,极蜂超薄对讲机A306获得了国家颁布的无线电发射设备型号核准证。

  • 糖分低利于减肥的水果(这些低热量的水果)

    而且现代医学发现,木瓜中含有一种酵素,能消化蛋白质,可以帮助人体对食物进行消化和吸收,长期食用还有利于身体健康呢。甜橙维生素C多,纤维度多,热量低,甚至可以替代蛋糕和曲奇。甜橙高纤维素可有助于排便,排出身体的废物和有害物质,清理肠胃。葡萄柚富含维生素C,糖份也不高,如果以吃一颗葡萄柚来代替一餐,热量当然低,假使其它餐的热量也控制得宜,一段时间后自然瘦下来。

  • 转业时候会算哪几项费用(转业船票测算的几个典型问题)

    第一个问题,“严控一毛三”的问题。这个已经被证实,确实是有通知下去的。但是,需要提醒大伙注意的是——你们要搞清楚,“严控”和“严禁”的区别。“严控”和“严禁”,也是如此——不是说,绝对没有,而是有,可能比较少而已。

  • 第九届机车年会(只争朝夕不负韶华)

    “只争朝夕不负韶华”苏州市吴中区汽车摩托车运动年终大会圆满落幕苏州市吴中区汽车摩托车运动年终大会暨雄峰俱乐部第九届年会于2021年1月2日在吴中区木渎召开。荣获了“吴中区时代楷模”称号。

  • 给一位家人写一篇小传800字(写写我的恩师赵乃庚先生)

    但后来知道赵老师在校办一直关注着我的消息。赵老师依然像现在一样执着地干自己心爱的事业。2018年在我退休一年后,就正式参加了赵老师的“星星影视”团队。赵老师说自己没有最新的设备,许多镜头的设置,都是靠手工,但那是一种创意,其效果是固定的程序无法比拟的。我和赵老师既是师生,又是好朋友,疫情前每次回西安我都去看他。如今每个周五他仍准时推出他的《朗诵与音乐》节目。二排左一为赵老师。

  • 国庆节适合去的地方旅游(国庆旅游去哪好)

    说起台州的历史,历史悠久。台州自古素有“水陆要塞,咽喉为县”之称。此外,还有银鱼、甲鱼、青虾、水禽、水菜等各种湖鲜产品。额济纳是世界上仅存的三个胡杨林之一,沿沙漠分布着38万亩胡杨林。八月刚过,额济纳迎来了最好的一天。九月初恰逢稻城初秋时节,大片的高原草甸由夺目的绿色过渡到迷人的金色。