本篇内容主要讲解“JavaScript位运算异或怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript位运算异或怎么使用”吧!
算法:
在位运算中,运用最多的便是异或操作^,规则如下所示:
1.a^a = 0 ,a^0 = a,2.a^b^a= a^a^b = 0^b = b备注:下面的两个题目是单纯使用异或操作的题目,一种是最基本的异或操作,一种是稍作转换就可以完成的变形题目。
题目1: 异或的基本使用
代码实现:
func singleNumber(nums []int) int { if len(nums) == 0 { return 0 } res := 0 for _,v := range nums{ res ^= v } return res}// 算法:// 利用位运算,异或的使用,a^a = 0 ,a^0 = a,// 因为题目是两个数,和一个数,属于^的完美使用范畴,// 由公式:a^b^a= a^a^b = 0^b = b,可以直接将代码取异或操作,//结果就是那个个数为1的数
题目2: 异或的变形题目
代码实现:
func singleNumber(nums []int) []int { if len(nums) == 0 { return nil } // step1:抵消掉数量为2的数 tmp:= 0 for _,v:=range nums{ tmp ^= v } // step2:找出来第一个为1的bit位 i:=0 for { n := 1<<i if tmp&n != 0 { break } i++ } // step3:按照bit=1来将数组分成两组,然后分别计算这两组的异或值,也就是这两个数 a,b := 0,0 test := 1<<i for _,n := range nums { if n & test == 0{ a^=n } else { b^=n } } return []int{a,b}}// 算法:属于异或的延伸题目// 因为有两个数字个数是1,其他都是两个,所以要使用异或,// 大体思路是将包含两个一个的数组变成2个分别包含一个个数是1的数组里面,将题目转换成题目1的做法// 算法分为三步: // step1:通过异或,最终获取这两个数字的异或结果a^b=0xiiiii, // 这里只要是bit!=0,就说明这一个bit位在a,b两个数中不相同,我们就从低位开始找,找到第一个为1的bit位即可。// step2:找到这个bit位置// step3:遍历数组,将数组中该bit==1的元素放入数组A,bit==0的放入数组B,// 分别计算A,B就可以得到这两个数。
到此,相信大家对“JavaScript位运算异或怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。