java中的異或問(wèn)題代碼解析
java的位運(yùn)算符中有一個(gè)叫異或的運(yùn)算符,用符號(hào)(^)表示,其運(yùn)算規(guī)則是:兩個(gè)操作數(shù)的位中,相同則結(jié)果為0,不同則結(jié)果為1。下面看一個(gè)例子:
public class TestXOR{ public static void main(String[] args){ int i = 15, j = 2; System.out.println("i ^ j = " + (i ^ j)); } }
運(yùn)行結(jié)果是:i^j=13.
分析上面程序,i=15轉(zhuǎn)成二進(jìn)制是1111,j=2轉(zhuǎn)成二進(jìn)制是0010,根據(jù)異或的運(yùn)算規(guī)則得到的是1101,轉(zhuǎn)成十進(jìn)制就是13.
利用這個(gè)規(guī)則我們可以靈活運(yùn)用到某些算法。比如,假定有2K+1個(gè)數(shù),其中有2k個(gè)相同,需要找出不相同的那個(gè)數(shù),比如:2、3、4、4、3、5、6、6、5。我們利用異或運(yùn)算符就可以這樣寫:
public class TestXOR{ public static void main(String[] args){ int[] array = {2,3,4,4,3,5,6,6,5}; int v = 0; for (int i = 0;i < array.length;i++) { v ^= array[i]; } System.out.println("只出現(xiàn)一次的數(shù)是:" + v); } }
結(jié)果是:只出現(xiàn)一次的數(shù)是2.
我們就是巧用異或運(yùn)算符的規(guī)則,得出一個(gè)數(shù)和0異或還是自己,一個(gè)數(shù)和自己異或是0的原理。
上述計(jì)算方式:v=2^3^4^4^3^5^6^6^5;
根據(jù)交換律以及上述規(guī)則
可以推出只出現(xiàn)一次的數(shù)(需滿足前提條件2k個(gè)相同)
總結(jié)
以上就是本文關(guān)于java中的異或問(wèn)題代碼解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
- java異或加密算法
- Java中位運(yùn)算(移位、位與、或、異或、非) 的簡(jiǎn)單實(shí)例
- Java中使用異或運(yùn)算符實(shí)現(xiàn)加密字符串
- java使用異或?qū)崿F(xiàn)變量互換和異或加密解密示例
- Java編程實(shí)現(xiàn)對(duì)十六進(jìn)制字符串異或運(yùn)算代碼示例
- Java中使用異或語(yǔ)句實(shí)現(xiàn)兩個(gè)變量的互換
- Java使用異或運(yùn)算實(shí)現(xiàn)簡(jiǎn)單的加密解密算法實(shí)例代碼
- Java異或技操作給任意的文件加密原理及使用詳解
- java實(shí)現(xiàn)兩個(gè)文件的異或運(yùn)算
- Java中異或的深入講解
相關(guān)文章
線程池中execute與submit的區(qū)別說(shuō)明
這篇文章主要介紹了線程池execute與submit的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03java抓取鼠標(biāo)事件和鼠標(biāo)滾輪事件示例
這篇文章主要介紹了java抓取鼠標(biāo)事件和鼠標(biāo)滾輪事件示例,需要的朋友可以參考下2014-05-05SpringCloud輪詢拉取注冊(cè)表與服務(wù)發(fā)現(xiàn)流程詳解
這篇文章主要介紹了SpringCloud輪詢拉取注冊(cè)表與服務(wù)發(fā)現(xiàn),現(xiàn)在很多創(chuàng)業(yè)公司都開(kāi)始往springcloud靠了,可能是由于文檔和組件比較豐富的原因吧,畢竟是一款目前來(lái)說(shuō)比較完善的微服務(wù)架構(gòu)2022-11-11Spring Boot 配置和使用多線程池的實(shí)現(xiàn)
這篇文章主要介紹了Spring Boot 配置和使用多線程池的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Springboot項(xiàng)目對(duì)數(shù)據(jù)庫(kù)用戶名密碼實(shí)現(xiàn)加密過(guò)程解析
這篇文章主要介紹了Springboot項(xiàng)目對(duì)數(shù)據(jù)庫(kù)用戶名密碼實(shí)現(xiàn)加密過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Java中jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(二)
這篇文章主要介紹了Java中jqGrid 學(xué)習(xí)筆記整理——進(jìn)階篇(二)的相關(guān)資料,需要的朋友可以參考下2016-04-04解決idea npm:無(wú)法將“npm”項(xiàng)識(shí)別為cmdlet、函數(shù)、腳本文件或可運(yùn)行程序的名稱問(wèn)題
在IDEA中運(yùn)行npm命令時(shí)出現(xiàn)無(wú)法識(shí)別的錯(cuò)誤,通常是由于npm環(huán)境變量配置不正確引起,解決方法包括以管理員身份運(yùn)行IDEA,確認(rèn)node和npm是否正確安裝及配置環(huán)境變量,需要在系統(tǒng)環(huán)境變量中添加node.js的安裝路徑,并設(shè)置npm的全局模塊和緩存路徑2024-10-10SpringBoot啟動(dòng)后啟動(dòng)內(nèi)嵌瀏覽器的方法
這篇文章主要介紹了SpringBoot啟動(dòng)后啟動(dòng)內(nèi)嵌瀏覽器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12