理解 java 使用 异或 交换两数】的更多相关文章

网上看了一些使用异或交换两数,不是很好理解.现在写一下自己的理解. 首先是 异或原则,对于任意 x: x ^ x == 0; x ^ 0 == x; 思路: 根据原则,可以得到两个公式: 求a:     a^b^a=b 求b:     a^b^b=a 交换两个数: 定义两个数:a b a = a ^ b;      // 保存 a ^ b 的结果 b = a ^ b;      --> a ^ b ^ b = a // 根据公式发现,这一步求的是a,只是用b接收了 a = a ^ b;     …
问题1:实现pow(int x, int y) ,即x的y次方 x的y次方就是有y个x连续乘机,代码如下: #include <stdio.h> #include <stdlib.h> int my_pow(int x,int y){ ) ; ; for(;i<y;i++){ ret=ret*x; printf(,ret); } return ret; } int main(){ ,); printf("====%d\n",tmp); ; } 结果 [ro…
错误示范 1. 直接交换 public class SwapNumbers { // 直接交换 public static void swap(int a, int b) { int temp = a; a = b; b = temp; }; public static void main(String[] args) { int a = 10; int b = 20; System.out.println("交换前: a = " + a + ": b = " +…
还得从一个很经典的面试题说起:不通过第三个变量来交换两个变量a,b的值... 一个很经典的答案是通过异或来解决: 第壹步:a=a^b; 第贰步:b=a^b; 第叁步:a=a^b; 以前提起"异或"运算,真的很疑惑? 今天看到"布尔代数简介",再次看到这个异或运算,才知道异或运算符"^"和"&"和"|"一个级别... 好吧,大家一起来温习下"~"."&"…
异或(exclusive OR)作为4种逻辑操作符之一,相对其他3种(OR/AND/NOT)来说,出场的次数非常少,是因为在日常开发中能用到它的场景本来就不多.对笔者来说,目前接触到场景只有交换两个数值时才会用到. Java Code: int a = 5; int b = 95; System.out.println(a + ", " + b); a ^= b;//等价于 a = a ^ b; b ^= a; a ^= b; System.out.println(a + "…
数组中两数的最大异或值 给定一个非空数组,数组中元素为 a0, a1, a2, … , an-1,其中 0 ≤ ai < 231 . 找到 ai 和aj 最大的异或 (XOR) 运算结果,其中0 ≤ i,j < n. 你能在O(n)的时间解决这个问题吗? 示例: 输入: [3, 10, 5, 25, 2, 8] 输出: 28 解释: 最大的结果是 5 ^ 25 = 28. 这道题是一道典型的位操作Bit Manipulation的题目,我开始以为异或值最大的两个数一定包括数组的最大值,但是OJ…
1. 问题描述: 有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小. 2. 求解思路: 当前数组a和数组b的和之差为    A = sum(a) - sum(b)    a的第i个元素和b的第j个元素交换后,a和b的和之差为    A' = sum(a) - a[i] + b[j] - (sum(b) - b[j] + a[i])        = sum(a) - sum(b) - 2 (a[i]…
第一种:添加中间变量,算是最经典最简易的一种了. //添加一个中间变量 int x = 1, y = 2; int z; z = x;x = y;y = z; System.out.println(x+","+y); 虽说是最容易想到的一种,但是不建议使用,原因无他,太low. 第二种,通过加减实现. //加减 x = 1;y = 2; x = x + y; y = x - y; x = x - y; System.out.println(x+","+y);  第三…
实现变量的值互相交换的三种不同方法 方法一:利用第三个变量来实现数值的交换 int tmp; tmp = a; a = b; b = tmp; 此方法直观,简易.不易出错,推荐使用 方法二:利用两个变量间的加减运算实现数值的交换 a=a+b; b=a-b; a=a-b; //a=a-b; //b=a+b; //a=b-a; 注:在某些运算中会出现bug,不建议使用 方法三:利用按位异或运算实现数值的交换 a=a^b;//bug,自身异或为0 b=a^b; a=a^b; 注:同样的在某些运算中会出…
在一次面试中,做了这么一道题"交换两个整型变量的值",当时看到这个题目之后,会心一笑,这也太简单了--直接使用中间变量交换不就可以了吗?但是,面试官却说不需要返回值,在调用的地方,再次输出变量的值,我就不知道了,于是,他提示我用反射.思考了良久,就写了下面的代码.package com.yzh.study.fanshe; import java.lang.reflect.Field; /** * author:yangzhou * time: 2018/5/9 15:55 * desc…