亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java不使用第三變量交換兩個(gè)變量的值

 更新時(shí)間:2024年04月25日 09:16:02   作者:天航星  
這篇文章主要介紹了java不使用第三變量交換兩個(gè)變量的值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

不使用第三變量交換兩個(gè)變量的值

在 Java 中,經(jīng)常會(huì)需要交換兩個(gè)變量的值,我們一般是使用第三變量完成

比如:

temp = a;
a = b;
b = temp;

這樣的寫法確實(shí)能達(dá)成目標(biāo),但因此而引入了第三變量,對(duì)資源的消耗增加了。

這里總結(jié)了兩種不使用第三變量實(shí)現(xiàn)的方式

這兩種方法僅為個(gè)人總結(jié),不能斷定只有這三種,非常希望大家能提出其他的方式,互相學(xué)習(xí)。

加減交換法

a = a + b;
b = a - b;
a = a - b;a = a + b;
b = a - b;
a = a - b;

這種方式還有更高級(jí)的寫法:

a = a + b - (b = a);

這種寫法確實(shí)達(dá)到了目標(biāo),但還只是數(shù)字層面的技巧,下面介紹一種計(jì)算機(jī)底層的方式。

異或運(yùn)算法

異或運(yùn)算平時(shí)用得較少,這里先介紹一下。

兩個(gè)數(shù)進(jìn)行異或運(yùn)算,其實(shí)就是它們的二進(jìn)制數(shù)每一位進(jìn)行運(yùn)算:相同為 0,不同為 1

0 ^ 0 = 0;1 ^ 0 = 1;0 ^ 1 = 1;1 ^ 1 = 0;

由此可以得出異或的 3 個(gè)特點(diǎn):

  • 0 異或任何數(shù) = 任何數(shù)
  • 1異或任何數(shù) = 任何數(shù)取反
  • 任何數(shù)異或自己 = 把自己置0

異或的常見用途:

  • 使某些特定的位翻轉(zhuǎn)

例如對(duì)數(shù) 10100001 的第 2 位和第 3 位翻轉(zhuǎn),則可以將該數(shù)與 00000110 進(jìn)行異或運(yùn)算:

10100001 ^ 00000110 = 10100111
  • 兩個(gè)變量值的交換,而不必使用第三變量

這就是我們這里的需求了。

例如交換兩個(gè)整數(shù) a = 10100001,b = 00000110 的值, 可以這樣實(shí)現(xiàn):

a = a ^ b; // a = 10100111
b = b ^ a; // b = 10100001
a = a ^ b; // a = 00000110

以上過程等效于:

a = a ^ b;
b = b ^ a = b ^ ( a ^ b ) = a ^ b ^ b = a ^ 0 = a;
a = a ^ b = (a ^ b) ^ a = b ^ a ^ a = b ^ 0 = b;

這樣就實(shí)現(xiàn)了兩個(gè)變量值的交換。

更推薦這種方式,倒不因?yàn)檫@樣寫更高級(jí),而是這樣的二進(jìn)制運(yùn)算是最快的,執(zhí)行效率最高。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaSe和JavaEE的區(qū)別原理面試題精講

    JavaSe和JavaEE的區(qū)別原理面試題精講

    這篇文章主要為大家介紹了JavaSe和JavaEE的區(qū)別原理面試題精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java實(shí)現(xiàn)簡(jiǎn)單畫畫畫板

    Java實(shí)現(xiàn)簡(jiǎn)單畫畫畫板

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單畫畫畫板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java獲取http和https協(xié)議返回的json數(shù)據(jù)

    Java獲取http和https協(xié)議返回的json數(shù)據(jù)

    本篇文章主要介紹了Java獲取http和https協(xié)議返回的json數(shù)據(jù) ,本篇文章提供兩個(gè)方法,幫助各位如何獲取http和https返回的數(shù)據(jù)。有興趣的可以了解一下。
    2017-01-01
  • Ubuntu 使用Jni開發(fā)實(shí)例詳解

    Ubuntu 使用Jni開發(fā)實(shí)例詳解

    這篇文章主要介紹了Ubuntu 使用Jni開發(fā)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Java使用正則表達(dá)式演示電話與郵箱格式

    Java使用正則表達(dá)式演示電話與郵箱格式

    本文詳細(xì)講解了Java正則表達(dá)式的用法,舉例演示電話和郵箱格式,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • MyBatis注解CRUD與執(zhí)行流程深入探究

    MyBatis注解CRUD與執(zhí)行流程深入探究

    這篇文章主要介紹了MyBatis注解CRUD與執(zhí)行流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • java拋出異常與finally實(shí)例解析

    java拋出異常與finally實(shí)例解析

    這篇文章主要介紹了java拋出異常與finally實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • RecyclerChart動(dòng)態(tài)屬性圖標(biāo)聯(lián)動(dòng)數(shù)據(jù)動(dòng)態(tài)加載詳解

    RecyclerChart動(dòng)態(tài)屬性圖標(biāo)聯(lián)動(dòng)數(shù)據(jù)動(dòng)態(tài)加載詳解

    這篇文章主要為大家介紹了RecyclerChart動(dòng)態(tài)屬性圖標(biāo)聯(lián)動(dòng)數(shù)據(jù)動(dòng)態(tài)加載詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • spring異步service中處理線程數(shù)限制詳解

    spring異步service中處理線程數(shù)限制詳解

    這篇文章主要給大家介紹了關(guān)于spring異步service中處理線程數(shù)限制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • springboot?jpa之返回表中部分字段的處理詳解

    springboot?jpa之返回表中部分字段的處理詳解

    這篇文章主要介紹了springboot?jpa之返回表中部分字段的處理詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論