java怎么不增加临时变量交换值
思路
1、利用加法實(shí)現(xiàn)功能,原理是先把數(shù)字合并起來賦值給其中一個數(shù)字,然后分別按順序減去兩個數(shù)字。(容易導(dǎo)致數(shù)據(jù)溢出,并不完美)
2、利用乘法實(shí)現(xiàn)功能,原理和加法類似,先把數(shù)字乘起來賦值給另一個數(shù)字,然后分別按順序除兩個數(shù)字。(容易導(dǎo)致數(shù)據(jù)溢出,并不完美)
#include <stdio.h> int main() {int a = 5;int b = 10;a = a * b;//a和b乘起來賦值給ab = a / b;//給這個新的數(shù)字除以b得到a的值a = a / b;///給這個新的數(shù)字除以a的值得到b的值printf("a=%d,b=%d\n", a, b);return 0; }3、按位異或?qū)崿F(xiàn)(利用了集合的思想,完美解決這個問題)
理解按位異或的意義
對兩個二進(jìn)制數(shù)異或表示,兩個二進(jìn)制數(shù)字相同則為0,不同則為1,
0^0=0
1^0=0
0^1=1
1^1=0
對二進(jìn)制代碼按位異或后,有三個特點(diǎn):
1、0異或任何數(shù)=任何數(shù)
2、1異或任何數(shù) = 任何數(shù)取反
3、任何數(shù)異或其本身=0
按位異或常用于
(1)將二進(jìn)制數(shù)字某幾個特定的位置翻轉(zhuǎn),只需要將該數(shù)字與一個特定位置為1,其他位置為0的數(shù)字按位異或。例如:
10011011第一第二位翻轉(zhuǎn),則將它和00000011按位異或,得到10011000
(2)實(shí)現(xiàn)兩個值交換,利用按位異或的性質(zhì),代碼如下
代碼
public class Exchange {public static int[] exchangeAB(int[] AB) {AB[0] = AB[0] ^ AB[1];AB[1] = AB[0] ^ AB[1];AB[0] = AB[0] ^ AB[1];return AB;}public static void main(String[] args) {int[] AB = {2, 3};System.out.println(AB[0] + " " + AB[1]);exchangeAB(AB);System.out.println(AB[0] + " " + AB[1]);} }總結(jié)
以上是生活随笔為你收集整理的java怎么不增加临时变量交换值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查找算法有哪些?
- 下一篇: 内部类的分类及其定义