如何交換兩個變數的值
如何交換變數a和變數b的值?
方法一:引入第三個變數
這種方法比較常用,同時適用各種資料型別。以C語言程式碼為例,介紹如下:
int a=1, b=2;
int temp; //引入臨時變數
temp = a;
a = b;
b = temp;
方法二:不引入第三個變數
這種方法比較少見,並且對於不同的資料型別處理方式不一樣。筆者整理了三種處理方式,介紹如下:
1. 加減法:該方法可以交換整型和浮點型數值的變數,但在處理浮點型的時候有可能出現精度的損失。
a = a + b; //求和
b = a - b; //和-b得到a的值
a = a - b; //和-a得到b的值
當a和b同號時,求和得到的結果及有可能出現越界溢位的情況。
2. 異或法:在運算過程中是將10進位制的數轉換成2進位制的數進行異或運算。可以完成對整型變數的交換,對於浮點型變數它無法完成交換。由於是按位異或,所以不存在溢位的情況。
異或真值表如下:
輸入a | 運算子 | 輸入b | 結果 |
---|---|---|---|
1 | ^ | 0 | 1 |
1 | ^ | 1 | 0 |
0 | ^ | 0 | 0 |
0 | ^ | 1 | 1 |
異或運算口訣:相同為0,相異為1.
利用異或法處理的C語言程式碼如下:
#include <stdio.h>
int main(void)
{
int a=1, b=2;
a = a ^ b; // 01^10=11
b = a ^ b; // 11^10=01
a = a ^ b; // 11^01=10
}
3. 乘除法:可以處理整型和浮點型變數,但在處理浮點型變數時也存在精度損失的問題。而且乘除法相比加減法要多一條約束:b不能為0.
a = a * b; //求積
b = a / b; //積/b=a
a = a / b; //積/a=b
綜上所述,還是引入第三個變數進行資料的交換比較好,具有通用性,並且安全可靠,不存在後面幾種方法的缺陷(資料溢位,適用資料型別有限制等狀況)
附
該文章於2017年6月13日於CSDN上首次發表,2017年12月22日搬家至此!
相關文章
- Swift交換兩個變數的值Swift變數
- 如何不使用臨時變數,交換兩個變數的值。變數
- 不使用臨時變數交換兩個變數的值變數
- php不用第三個變數,交換兩個數的值PHP變數
- js不使用第三個變數交換兩個變數的值JS變數
- 不用第三個變數,直接交換兩個變數的值變數
- JavaScript兩個變數交換值(不使用臨時變數)JavaScript變數
- 交換兩個變數變數
- 異或運算的巧用 → 不用額外的變數,如何交換兩個變數的值?變數
- 交換兩個整型變數變數
- 不用第三個變數,交換變數的值變數
- C++ 引用 (交換兩個數的值)C++
- 【C語言】給定兩個整型變數的值,將兩個值的內容進行交換C語言變數
- C語言交換兩個變數的值的5種基本方法C語言變數
- python 交換兩個變數的方式Python變數
- C++取反交換兩個數的值C++
- 面試題-JavaScript交換兩個變數的方法面試題JavaScript變數
- C的兩個數值交換(Android之JNI)Android
- 數值變數交換常用方法變數
- c語言 - 交換兩個變數(不建立臨時變數)兩種方法C語言變數
- 總結了幾個在PHP開發時怎麼交換兩個變數的賦值PHP變數賦值
- JavaScript實現兩個數的交換JavaScript
- Python面試技巧-交換兩個元素的值Python面試
- mysql交換兩行或兩列的值MySql
- C++ 一種交換兩個數的思路C++
- 不借助第三方變數實現兩個整數變數值的互換變數
- 如何列印數值變數變數
- 呼叫函式實現兩個數交換函式
- 透過交換指標變數的值改變大小數字的位置-學習筆記指標變數筆記
- UPDATE從左向右,變數優先,逐行更新.順序執行的,可以交換兩列之間的值變數
- 如何獲取變數token的值變數
- 如何獲取變數 token 的值變數
- js如何判斷一個變數是否具有值JS變數
- js如何判斷一個變數是否有值JS變數
- java基礎變數的交換Java變數
- 三種交換變數的方法變數
- 史上最糟糕的兩個變數名變數
- 世上最糟糕的兩個變數名變數