用異或運算交換兩個數
平常交換兩個數一般是利用一箇中間變數,其實可以利用異或^也可以實現交換,而且效率更快哦!
程式碼如下:
void Swap(int& a,int& b){
if(a!=b){
a^=b;
b^=a;
a^=b;
}
}
原理:利用相同的數異或必為0,異或滿足交換率和任何數和0異或都等於本身。
比如:
1.a=a^b;
2.b=b^a=b^(a^b)=b^b^a=0^a=a;
3.a=a^b=a^(b^a)=b^a^a=b^0=b;
證畢。
相關推薦
用異或運算交換兩個數
平常交換兩個數一般是利用一箇中間變數,其實可以利用異或^也可以實現交換,而且效率更快哦! 程式碼如下: void Swap(int& a,int& b){ if(a!=b){ a^=b; b^=a; a
java異或運算交換兩個數的陷阱
我們知道,用異或運算可以不用定義中間變數就可以交換兩個數。如下: <span style="font-size:14px;">int a=2; int b=3; System.out.println("交換前:a="+a+" b="+b); a=a^b;
深思通過異或運算交換兩個變數
平常程式設計的時候交換兩個數的需求很常見,比如說氣泡排序裡面的位置交換,我們一般都會使用下面這種方法: public void swap(int a, int b){ int temp = a; a = b; b = temp; } 最近右發現一個抖機靈的方法,看著逼格很
【C語言】使用異或運算子交換兩個數
異或交換兩個數: #include<stdio.h> #include<stdlib.h> int main() { int a, b; a = 10; b = 20; a= a^b; b =a^b; a =a^b; printf("%d\n%d\n", a
使用異或運算交換兩個變數位置的演算法非常低!
看了很多程式設計方面的知識,在慕課網上的一個關於二進位制的視訊中,偶然聽見老師說採用異或運算的方法交換兩個數字的順序可以提高效率,原因是位運算是直接對二進位制位進行運算,而二進位制位更接近底層。 因此,我一直信誓旦旦的給朋友們普及異或運算的高效率,直到被別人反駁之後,我去網上搜了很多相關的文章。
用異或來交換兩個變數更耗時
FROM:陳碩 http://blog.csdn.net/solstice/article/details/5166912 翻轉一個字串,例如把 "12345" 變成 "54321",這是一個最簡單的不過的編碼任務,即便是 C 語言初學者的也能毫不費力地寫出類似如下的程式
用異或來交換兩個變數是錯誤的
用異或來交換變數是錯誤的 翻轉一個字串,例如把 “12345” 變成 “54321”,這是一個最簡單的不過的編碼任務,即便是 C 語言初學者的也能毫不費力地寫出類似如下的程式碼: // 版本一,用中間變數交換兩個數,好程式碼 void reverse_
使用異或運算實現兩數交換
通常我們實現兩數交換不得不引入一個臨時變數temp作為媒介,而使用異或運算也能實現同樣的功能,甚至無需使用臨時變數。 這是一個通常的做法: int main(){ int a=1,b=2,temp; temp=a; a=b; b=temp; printf("%d,%d\n",a,b); ret
Java中異或運算實現兩個整數的交換以及其功能函式實現
今天學習到一種超酷炫的交換兩個整數的方法,給各位分享一下。異或運算屬於位運算的一種,首先簡單介紹一下異或預算的語法規則。 假設a與b為不相等的兩個整數。 (1)a^a=0; (2)a^b
使用異或運算實現兩處記憶體的原地值交換
^(異或運算)與|(或)和&(與)的一個顯著的不同點在於,異或運算能夠儲存兩個位串一種關係,舉個簡單的例子,比如對於a=10,b=01這兩個二進位制數來說,他們的異或結果為11, 從這個結果上我們就可以非常直觀地得出a與b在兩個位上的都是“相異”的,所以如果我們知道
異或操作符交換兩個整數
異或:相同為0 不同為1 例:一位二進位制異或取值表 取值 取值 結果 0 0 0 0 1 1 1 0 1 1 1 0 那麼我們交換一個兩個整數值就不需要使用中間值了 public static void main(String[] args) { int a = 2; //二進
使用異或運算交換2個數值
#include<iostream> using namespace std; int main(){ int a=1;//二進位制位0001 int b=2;//二進位制位0010 cout<<"交換前a=
java常見邏輯練習題,用三杯水、加法、異或交換兩個數
題目:用三杯水、加法、異或交換兩個數 分析:三杯水原理交換直接用第三個變數交換即可,即: 三杯水 int a = 4; int b = 5; int c = a; a = b; b = c; System.out.println(a);
用異或進行兩個數交換的陷阱
我們都知道可用通過異或運算交換兩個數,而不需要任何的中間變數。 如下面: void exchange(int &a, int &b) { a ^= b; b ^= a; a ^= b; } 然而,這裡面卻存在著一個非常隱蔽的陷阱。通
為什麽三次異或操作可以交換兩個數
找到 原來 們的 異或操作 去掉 進制 ont 交換兩個數 一位 a和b是兩個整數,經過以下三次異或操作,可以達到交換目的:a = a ^ b;b = a ^ b;a = a ^ b; 首先要理解,什麽是^(異或)操作: 二進制兩數運算結果: 0 ^ 0 = 0
C語言用異或的方法將兩個數的值互換
在VC和GCC編譯器,a和b的值都互換了,但陣列array[0]和array[1]在gcc編譯器array[0]得到的是一個莫名其妙的0值,很令人費解。那麼原因是什麼呢?因為C++語言沒有在同一表示式中規定運算順序,對於同一變數的兩次修改不能放在一個表示式裡,所以在第二次更改同一變數時不能
我為什麼不喜歡用異或做兩數值的交換
大家在初學程式設計的過程中,肯定會學習到使用程式碼去交換兩元素的值雖然已經過去了很久,但筆者對當時老師上課所講的話記憶猶新:“交換兩個值,就像是把醋瓶子裡的酒裝入酒罐,把酒罐子裡的醋倒入醋瓶。要完成此任務,就要多找一個空瓶子,作為兩者的交換的暫存罐”同理,代入程式碼中,我們可
兩個int變數交換值的一些方式(巧用異或)
兩個int變數交換值輸出,我們程式設計的時候一般都是引入第三個變數temp,這種方式大家都知道,但是筆試題的時候往往都會限制用第三個變數,這時候也簡單,大家的第一反應是不是都是 int x = 3; int y = 4; x = x + y; //x = 7 y =
用異或交換兩個整數的陷阱
前面我們談到了,可用通過異或運算交換兩個數,而不需要任何的中間變數。 如下面: void exchange(int&a,int&b) { a ^=b; b ^=a; a ^=b; } 然而,這裡面卻存在著一個非常隱蔽的陷阱。通常我們
交換兩個數不使用第三方變數=!!=深入理解按位異或運算子
不使用第三方變數交換兩個變數的值這需要進行位操作,必較麻煩的, 在學習程式語言和進行程式設計的時候,交換兩個變數的值是經常要使用的。通常我們的做法是(尤其是在學習階段):定義一個新的變數,藉助它完成交換。程式碼如下: int a,b; a=10; b=15; int