交換兩個變數的三種方式
這裡我們介紹三種交換變數的方式:
第一種:
這也是最為常用的一種,引入第三個變數:
a=1;
b=2;
引入第三個變數c交換:
c=a;
a=b;
b=c;
此時a=2,b=1;
第二種:不用引入第三個變數,利用加減法實現
a=1;
b=2;
交換過程:
a=a+b;
b=a-b; <==>等效於b=a+b-b
a=a-b; <==>等效於a= a+b-( a+b-b)=a+b-a-b+b
第三種:利用異或運算子^
異或運算轉化為二進位制來說,對應位是相異為1,相同為0;
所以任何數異或同一個數兩次,還是起本身,利用這個原理進行計算
a=1;
b=2;
運算過程:
a=a^b;
b=a^b; b=a^b^b=a
a=a^b; a=a^b^a=b
很顯然,異或運算直接操作的是計算機中的二進位制,所以第三種運算速度是最佳的。
相關推薦
交換兩個變數的三種方式
這裡我們介紹三種交換變數的方式: 第一種: 這也是最為常用的一種,引入第三個變數: a=1; b=2; 引入第三個變數c交換: c=a; a=b; b=c; 此時a=2,b=1; 第二種:不用引入第三個變數,利用加減法實現 a=1; b=2; 交換
交換兩個變數的值,不借助第三個變數的四種方法(學習)
缺點:是隻能用於數字型別,字串之類的就不可以了。a+b有可能溢位(超出int的範圍),溢位是相對的, +了溢位了,-回來不就好了,所以溢位不溢位沒關係,就是不安全。2) 指標地址操作 因為對地址的操作實際上進行的是整數運算,比如:兩個地址相減得到一個整數,表示兩個變數在記憶體中的儲存位置隔了
交換兩個變數的值,不使用第三個變數的方法
Q1: 我們都知道交換兩個數的數值可以用三行程式碼解決,這是在C語言中就學過的: int c; c = a; a = b; b = c; 數學老師可能會給我們這個建議: a = a + b; b = a - b; //b=a+b-b=a a =
一道簡單的演算法題:不借助第三變數來交換兩個變數的值
今天做筆試碰到一道簡單的演算法題:不借助第三變數來交換兩個變數的值,記錄一下。 交換兩個變數的值的普遍做法都是藉助第三變數,這樣具有較高的可讀性。 a = 3 b = 5 t = a a = b b = t 但是,如果記憶體有限,只允許用2個變數呢? 強大的CS當然有辦法解決
不用第三個變數,直接交換兩個變數的值
#include <iostream> using namespace std; void swap_a(int &a , int &b) { a = a + b; b = a - b; a = a - b; } vo
PHP交換兩個變數的值,不使用第三個變數
當交換的為數字時: <?php /** * 雙方變數為數字時,可用交換方法五 * 使用加減運算子,相當於數學運算了^_^ */ $a = 1; // a變數原始值 $b = 2; //
不用第三個變數交換兩個變數的值
<?php // 不用php庫函式,將字串反轉 $i = 0; $str = 'hello world my name is SHUIPING_YANG '; while ($str[$i] !=
不用引入第三變數交換兩個變數的值
前幾天發現了一個問題:有人告訴我,要進行變數交換,就必須引入第三變數! 假設我們要交換a和b變數的值,如果寫成 int a=5,b=10; a=b; b=a; 那麼結果就是兩個都是10,理由不言而喻。 所以就應該引入第三變數,在a的值被覆蓋之前就把a的值保留好。
JAVA不使用第三個變數,交換兩個變數的值
我們先看看使用第三個變數的方法。 public class Swap{ public static void main(String[] args){ int a = 3;
C語言交換兩個變數數值的幾種方法
因為經常見到這類題目,就自己總結了以下幾種辦法 1. 建立中間變數 這是最快也是最簡單的辦法,例如: #include<stdio.h> int main() { int a=10; int b=20; i
關於交換兩個變數的不用第三個變數 異或的問題
void my_swa22p(int &a, int &b) { a = a^b; b = a^b; a = a^b;} 這個是經典的 不用第三個變數進行交換的方式; 但是這個有個 問題··· int a = 3; my_swa2
深思通過異或運算交換兩個變數
平常程式設計的時候交換兩個數的需求很常見,比如說氣泡排序裡面的位置交換,我們一般都會使用下面這種方法: public void swap(int a, int b){ int temp = a; a = b; b = temp; } 最近右發現一個抖機靈的方法,看著逼格很
一行python程式碼寫九九乘法表,1,2,3…到100的和,交換兩個變數的值
用一行程式碼輸出九九乘法表: 第一種方法: print('\n'.join([' '.join(["%d*%d=%d"%(i,j,i*j) for i in range(1,j+1)])for j in range(1,10)])) 第二種方法: print('\n'.join
使用異或運算交換兩個變數位置的演算法非常低!
看了很多程式設計方面的知識,在慕課網上的一個關於二進位制的視訊中,偶然聽見老師說採用異或運算的方法交換兩個數字的順序可以提高效率,原因是位運算是直接對二進位制位進行運算,而二進位制位更接近底層。 因此,我一直信誓旦旦的給朋友們普及異或運算的高效率,直到被別人反駁之後,我去網上搜了很多相關的文章。
C 原地交換兩個變數的值
第一種方法,大家會藉助第三個變數來實現: 如:tmp=A;A=B;B=tmp; 這種方法需要藉助第三變數來實現; 第二種方法是利用加減法實現兩個變數的交換: 如:A=A+B;B=A-B;A=A-B; 但是 如果 A+B 超出 A的範圍 ,會引起溢位。 第三種方法是
不用中間變數交換兩個變數的值
解1: 加減法:該方法可以交換整型和浮點型數值的變數,但在處理浮點型的時候有可能出現精度的損失。 public void swap (int a, int b) { a = a + b; b = a - b; a = a - b; } 解2: 異
python交換兩個變數的方法
http://www.cnblogs.com/aydenwang/p/9398826.html https://blog.csdn.net/qq_41187256/article/details/79687084 方法一:利用臨時變數(最基礎的用法,也是怎麼用都不容易出錯的方法) t
異或交換兩個變數的值
通常做法 #include<stdio.h> #include<stdlib.h> int main() { int a=10, b=20,temp; temp=a; a=b;
交換兩個變數的誤區(java)
在java中引數的傳遞有兩種方式,傳值和引用,實際上引用也是傳的值。當在一個方法中要交換兩個引數對應的值時,可能會有一系列問題。如下: package com.xx; import java.lang.reflect.Field; public cla
Java學習筆記12:交換兩個變數
public class TestPassByValue { public static void main(String[] args) { int num1 = 1; int num2 = 2; System.out.println("交換前 num1 的值為