溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

JavaScript位運(yùn)算異或怎么使用

發(fā)布時(shí)間:2022-03-17 15:54:37 來(lái)源:億速云 閱讀:432 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“JavaScript位運(yùn)算異或怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“JavaScript位運(yùn)算異或怎么使用”吧!

算法:

在位運(yùn)算中,運(yùn)用最多的便是異或操作^,規(guī)則如下所示:

1.a^a = 0 ,a^0 = a,2.a^b^a= a^a^b = 0^b = b備注:下面的兩個(gè)題目是單純使用異或操作的題目,一種是最基本的異或操作,一種是稍作轉(zhuǎn)換就可以完成的變形題目。

題目1: 異或的基本使用

代碼實(shí)現(xiàn):

func singleNumber(nums []int) int {    if len(nums) == 0 {        return 0    }    res := 0    for _,v := range nums{        res ^= v    }    return res}// 算法:// 利用位運(yùn)算,異或的使用,a^a = 0 ,a^0 = a,// 因?yàn)轭}目是兩個(gè)數(shù),和一個(gè)數(shù),屬于^的完美使用范疇,// 由公式:a^b^a= a^a^b = 0^b = b,可以直接將代碼取異或操作,//結(jié)果就是那個(gè)個(gè)數(shù)為1的數(shù)

題目2: 異或的變形題目

代碼實(shí)現(xiàn):

func singleNumber(nums []int) []int {    if len(nums) == 0 {        return nil    }    // step1:抵消掉數(shù)量為2的數(shù)    tmp:= 0    for _,v:=range nums{        tmp ^= v    }    // step2:找出來(lái)第一個(gè)為1的bit位    i:=0    for {       n := 1<<i        if tmp&n != 0 {           break       }       i++    }    // step3:按照bit=1來(lái)將數(shù)組分成兩組,然后分別計(jì)算這兩組的異或值,也就是這兩個(gè)數(shù)    a,b := 0,0    test := 1<<i    for _,n := range nums {        if n & test == 0{            a^=n        } else {            b^=n        }    }    return []int{a,b}}// 算法:屬于異或的延伸題目// 因?yàn)橛袃蓚€(gè)數(shù)字個(gè)數(shù)是1,其他都是兩個(gè),所以要使用異或,// 大體思路是將包含兩個(gè)一個(gè)的數(shù)組變成2個(gè)分別包含一個(gè)個(gè)數(shù)是1的數(shù)組里面,將題目轉(zhuǎn)換成題目1的做法// 算法分為三步: // step1:通過(guò)異或,最終獲取這兩個(gè)數(shù)字的異或結(jié)果a^b=0xiiiii, // 這里只要是bit!=0,就說(shuō)明這一個(gè)bit位在a,b兩個(gè)數(shù)中不相同,我們就從低位開(kāi)始找,找到第一個(gè)為1的bit位即可。// step2:找到這個(gè)bit位置// step3:遍歷數(shù)組,將數(shù)組中該bit==1的元素放入數(shù)組A,bit==0的放入數(shù)組B,// 分別計(jì)算A,B就可以得到這兩個(gè)數(shù)。

到此,相信大家對(duì)“JavaScript位運(yùn)算異或怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI