異或運算來實現兩個變數互換
一般情況下,如果我們要實現兩個變數互換需要藉助於一個第三方臨時變數,這個臨時變數可以臨時存放某一個變數的值,幫助我們完成值的交換。有沒有不需要其他變數、直接實現值互換的方法呢? 答案是:當然有。
這裡介紹一種特殊的情況(並不是對所有型別的變數都可以使用):當變數的型別是整形或者字元型的時候,位運算是一個非常有用的工具,尤其是異或運算。異或運算的法則是:x^0=x;x^x=0; 並且 a^b=b^a; 由此,可以得到:
a^b^b=a^(b^b)=a^0=a; 進行如下運算:
a=a^b;
b=a^b;
a=a^b;
實際上就是:令 a=a^b; 那麼 b=a^b; 實際是 b=(a^b)^b=a^b^b=a^(b^b)=a^0=a;
而 a=a^b; 其實就是 a=(a^b)^a=a^b^a=b;
所以運算完成後就達到了值互換的目的。
再次強調一下,變數型別是整型或字元型才可以使用該方法。
相關推薦
異或運算來實現兩個變數互換
一般情況下,如果我們要實現兩個變數互換需要藉助於一個第三方臨時變數,這個臨時變數可以臨時存放某一個變數的值,幫助我們完成值的交換。有沒有不需要其他變數、直接實現值互換的方法呢? 答案是:當然有。 &n
JAVA語法——實現兩個變數互換
具體細節見:https://blog.csdn.net/wwt18811707971/article/details/78291490 package 實現兩個變數的互換; import java.util.Scanner; public class 實現兩個變數的互換 {
用異或來交換兩個變數更耗時
FROM:陳碩 http://blog.csdn.net/solstice/article/details/5166912 翻轉一個字串,例如把 "12345" 變成 "54321",這是一個最簡單的不過的編碼任務,即便是 C 語言初學者的也能毫不費力地寫出類似如下的程式
用異或來交換兩個變數是錯誤的
用異或來交換變數是錯誤的 翻轉一個字串,例如把 “12345” 變成 “54321”,這是一個最簡單的不過的編碼任務,即便是 C 語言初學者的也能毫不費力地寫出類似如下的程式碼: // 版本一,用中間變數交換兩個數,好程式碼 void reverse_
一道簡單的演算法題:不借助第三變數來交換兩個變數的值
今天做筆試碰到一道簡單的演算法題:不借助第三變數來交換兩個變數的值,記錄一下。 交換兩個變數的值的普遍做法都是藉助第三變數,這樣具有較高的可讀性。 a = 3 b = 5 t = a a = b b = t 但是,如果記憶體有限,只允許用2個變數呢? 強大的CS當然有辦法解決
不借助第三者實現兩個變數的交換(java&&C)
1.原理:a^b^b = a 2.實現 java: package javaPractice; import java.util.*; public class Exchange { public static void main(String[] args) { Scanne
使用jquery來實現兩個選擇框內容的互移
今天開發專案的時候遇到了一個小問題:實現兩個文字框內容列表的互相移動,我剛開始使用了純js實現的,後來經過公司同事指點,使用jquery來實現這個功能,非常簡單。將程式碼貼出來,供以後複習使用。 最主要的應該是就會要學會靈活的運用jquery的函式庫 1.我
實現兩個變數的互換(不借助第三個變數)
變數的互換常見於陣列排序演算法中,當判斷兩個陣列元素需要互換時,將建立一個臨時變數來共同完成互換,臨時變數的建立增加了系統資源的消耗,如果需要互換的是兩個整型型別的變數,那麼可以使用更高
java 實現兩個變數的互換(不借助第三個變數,即中間變數、臨時變數)
變數的互換常用在陣列排序演算法中,當判斷兩個陣列元素互動時,需要藉助第三個變數來實現,即需要建立一個臨時變數來共同完成互換,但是臨時變數的建立增加了系統資源的消耗,如果需要交換的是兩個整數型別的變數,
在C# 中不使用 第三方變數 來交換兩個變數的值
1) 算術運算 簡單來說,就是通過普通的+和-運算來實現。程式碼如下: int a,b; a=10;b=12; a=b-a; //a=2;b=12 b=b-a; //a=2;b=10 a=b+a; //a=10;b=10 通過以上運算,a和b中的值就進行了交換。表面上看起來
iOS如何利用Delegate來實現兩個UIView之間的傳值
兩個View之間的傳值可以有多種方式。但本人覺得最合理最自然並且最安全的方式是通過Delegate方式。 設想一個場景: 1. 有兩個View,分別是A和B。 2. 點選A中的某個按鈕,出來B。 3. 對B做某些操作(比如輸入文字到textField,選擇picker等等)
深思通過異或運算交換兩個變數
平常程式設計的時候交換兩個數的需求很常見,比如說氣泡排序裡面的位置交換,我們一般都會使用下面這種方法: public void swap(int a, int b){ int temp = a; a = b; b = temp; } 最近右發現一個抖機靈的方法,看著逼格很
使用異或運算交換兩個變數位置的演算法非常低!
看了很多程式設計方面的知識,在慕課網上的一個關於二進位制的視訊中,偶然聽見老師說採用異或運算的方法交換兩個數字的順序可以提高效率,原因是位運算是直接對二進位制位進行運算,而二進位制位更接近底層。 因此,我一直信誓旦旦的給朋友們普及異或運算的高效率,直到被別人反駁之後,我去網上搜了很多相關的文章。
Java中異或運算實現兩個整數的交換以及其功能函式實現
今天學習到一種超酷炫的交換兩個整數的方法,給各位分享一下。異或運算屬於位運算的一種,首先簡單介紹一下異或預算的語法規則。 假設a與b為不相等的兩個整數。 (1)a^a=0; (2)a^b
[Java] 不使用第三個變數實現兩個整數型別變數互換(異或運算子)
在對變數進行互換時,通常的做法是建立一個臨時變數來共同完成互換,但臨時變數的建立增加了系統資源的消耗。 其實,如果需要交換的是兩個整數型別的變數,則可以使用異或運算子( ^ )進行互換。 imp
採用位異或方式將兩個變數數值調換
1 package debug; 2 3 class Demo2 { 4 public static void main(String[] args){ 5 int a = 1; 6 int b = 2; 7 System.out.
使用異或運算實現兩數交換
通常我們實現兩數交換不得不引入一個臨時變數temp作為媒介,而使用異或運算也能實現同樣的功能,甚至無需使用臨時變數。 這是一個通常的做法: int main(){ int a=1,b=2,temp; temp=a; a=b; b=temp; printf("%d,%d\n",a,b); ret
異或交換兩個變數的值
通常做法 #include<stdio.h> #include<stdlib.h> int main() { int a=10, b=20,temp; temp=a; a=b;
c語言 2個整數的交換 用兩個變數來實現
第1種 常規的方法 藉助於中間變數t來實現。 #include<stdio.h> int main() {int a,b,t;printf("請輸入兩個整數:");scanf("%d%d"
php使用異或xor調換兩個變數的值的原理
1、首先,我們要知道什麼是異或,異或,簡單來說就是:相同的兩個數,異或的結果是0;不同的兩個數,異或的結果是1。 2、0和0,異或的結果是0。1和1,異或的結果是0。0和1,異或的結果是1。於是我們發現,在0和1的世界裡:A和B異或,結果是C;B和C異或的結果