java怎么不增加临时变量交换值
生活随笔
收集整理的這篇文章主要介紹了
java怎么不增加临时变量交换值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路
1、利用加法實現功能,原理是先把數字合并起來賦值給其中一個數字,然后分別按順序減去兩個數字。(容易導致數據溢出,并不完美)
2、利用乘法實現功能,原理和加法類似,先把數字乘起來賦值給另一個數字,然后分別按順序除兩個數字。(容易導致數據溢出,并不完美)
#include <stdio.h> int main() {int a = 5;int b = 10;a = a * b;//a和b乘起來賦值給ab = a / b;//給這個新的數字除以b得到a的值a = a / b;///給這個新的數字除以a的值得到b的值printf("a=%d,b=%d\n", a, b);return 0; }3、按位異或實現(利用了集合的思想,完美解決這個問題)
理解按位異或的意義
對兩個二進制數異或表示,兩個二進制數字相同則為0,不同則為1,
0^0=0
1^0=0
0^1=1
1^1=0
對二進制代碼按位異或后,有三個特點:
1、0異或任何數=任何數
2、1異或任何數 = 任何數取反
3、任何數異或其本身=0
按位異或常用于
(1)將二進制數字某幾個特定的位置翻轉,只需要將該數字與一個特定位置為1,其他位置為0的數字按位異或。例如:
10011011第一第二位翻轉,則將它和00000011按位異或,得到10011000
(2)實現兩個值交換,利用按位異或的性質,代碼如下
代碼
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]);} }總結
以上是生活随笔為你收集整理的java怎么不增加临时变量交换值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查找算法有哪些?
- 下一篇: 内部类的分类及其定义