一、异或介绍 异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。...性质 1、交换律 2、结合律(即(a^b)^c == a^(b^c)) 3、对于任何数x,都有x^x=0,x^0=x 4、自反性 A XOR B XOR B = A XOR 0 = A 二、异或使用 异或运算最常见于多项式除法...,不过它最重要的性质还是自反性:A ^ B ^ B = A,即对给定的数A,用同样的运算因子(B)作两次异或运算后仍得到A本身。...解法二:异或就没有这个问题,并且性能更好。将所有的数全部异或,得到的结果与1^2^3^…^1000的结果进行异或,得到的结果就是重复数。 但是这个算法虽然很简单,但证明起来并不是一件容易的事情。...所以,将所有的数全部异或,得到的结果与1^2^3^…^1000的结果进行异或,得到的结果就是重复数。
异或运算常用来做数据的简单校验。...Java的实现:(将字节数组两两异或,返回最后异或值) public static byte getXor(byte[] datas){ byte temp=datas[0]; for (int...datas[i]; } return temp; } ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 如果是校验则看异或结果是否为
Java-异或运算 异或运算法则 异或的运算方法是一个二进制运算: 例图: 总结 例题1 例题2:136....异或的运算方法是一个二进制运算: 1^1=0 0^0=0 1^0=1 0^1=1 两者相等为0,不等为1. 例图: 总结 1、异或是一个数学运算符。应用于逻辑运算。...2、真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值相异结果为真。...3、n^0=n n^n=0,即任何数与0进行异或,为它本身,两个相同的数进行异或运算,会得到0。...所以,我们对于上边的解题办法就有了: 首先对1到1000,这1000个数进行异或运算,然后再把上边的1001个数进行异或运算,最后,再对这两个结果进行异或运算,就会得到唯一的那个n。
,异或的规则是转换成二进制比较,相同为0,不同为1....一个数a与另一个数b异或的结果等于a^b,用结果( a^b)异或a,就会得到b; 上面的结果,我们用代码来验证。代码( a=a^b; b=a^b; a=a^b;)可以转换成二进制计算。...a=a^b ; ———— 01=10^11 第一步得到结果C( a^b)赋值给a,所以a此时等于01 b=a^b; ———— 10=01^11 第二步 用结果( a^b)异或b,即用C(01)异或b(...a=a^b; ————-11=01^10 第三步,a(01)异或b(10),等于11。转为十进制a等于3. 最后打印出来,a等于3, b等于2. 第二种:用异或规则计算。 (规则:可以移动。...相同数异或等于0,任何数异或0等于本身) 第一步没变化,直接代入后面的代码进行计算。 第二步中b=a^b的 a^b转化为 a^b ^b ,其中让b^b等于0, a^0等于a。
Java异或校验 今天要用到异或校验,折腾了半天,写下来留作备用。 功能是将一串16进制的数进行异或校验,输出校验和。...代码: import java.util.Scanner; /* * 亦或校验算法 */ public class Checksum_XOR { @SuppressWarnings("resource...[i]<<4)&0x00f0)|((inb[i+1])&0x000f)); i++; j++; } byte temp = 0x00; //校验值 for(i = 0;i异或
异或运算主要用于判断两个值是否一样 异或运算的3个性质: 1.任何数和0进行异或运算,结果是原来的数,即b⊕0=b 2.任何数和其自身进行异或运算,结果为0,即b⊕b=0。...3.异或运算满足交换律和结合律,即x⊕y⊕x=y⊕(x⊕x)=y 例题: 力扣刷题 题解: class Solution { public int singleNumber...nums) { single ^= n; } return single; } } 运行截图: 结论:相较于哈希表,集合,异或运算较快一点
异或 ^ 的几个作用 一、交换两个整数的值而不必用第三个参数 a = 9; b = 11; a=a^b; 1001^1011=0010 b=b^a; 1011^0010=1001 a=a...^b; 0010^1001=1011 a = 11; b = 9; 二、奇偶判断 ^a操作就是将a中的每一位按位逐一进行异或,例如a=4’b1010,则b=1^0^1^0=0,由此可以判断a中为1...格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一的。...二进制数转格雷码 (假设以二进制为0的值做为格雷码的0) 格雷码第n位 = 二进制码第(n+1)位+二进制码第n位。不必理会进制。...Verilog 代码:gray=(binary>>1)^binary; 格雷码转二进制数 二进制码第n位 = 二进制码第(n+1)位+格雷码第n位。
JAVA异或加密 int 或者byte类型的数据异或操作后变成另外一个数字,再次和同一个数异或后又变成原来的数字。
文章摘要: 1、按位异或,可以简单理解成:不进位加法。即:1+1=0;0+0=0;1+0 =1; 2、任何数和自己异或结果为零。 3、按位异或自反性。两次运算操作,可以将最后的结果还原。...4、任何数和0做异或值不变,和1异或结果为原操作数取反。 5、交换律。不使用中间变量,交换两个数。 一、按位异或具有自反性。即:对同一个数据,进行两次按位异或操作,等于数据本身。...【只允许使用按位异或】 分析: 1、连续两次操作电灯开关,电灯将处于操作前状态。 2、关闭所有开关。任何数和自己异或结果为零。 实现: 1、定义“大房子”类。...本例演示了按位异或的自反性,异或还有其他妙用,我们可以总结如下: 1、按位异或,可以简单理解成:不进位加法。即:1+1=0;0+0=0;1+0 =1; 2、任何数和自己异或结果为零。...3、任何数和0做异或值不变,和1异或结果为原操作数取反。 4、交换律。不使用中间变量,交换两个数。
样例 给出 [1,2,2,1,3,4,3],返回 4 利用异或性质 此题考察的是异或运算的特点: 即两个相同的数异或结果为0。...0异或任何数,结果是这个数0^X=X 代码: public static int find1From2(int[] a){ int len = a.length, res = 0;
异或运算可以达到交换两数的目的,代码如下: ? 但不推荐使用这种方式,附上常用的临时变量方法对比说明。 临时变量方法: ?...另外一点,异或操作的代码可读性差。...在不引入临时变量的基础上,交换两数的值还可以使用三次加减法,代码如下: ? 这种方式同样需要三次内存写入操作,同时代码可读性也较差。...可以看到,临时变量法编译出的汇编代码量最少即效率更高,加减法和异或方法的区别仅仅是计算方式不同而已,操作步骤是一致的。 图1: 临时变量法和加减法汇编代码对比 ?...图2: 异或方法和加减法汇编代码对比 ?
异或简单介绍:异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1。...使用随机数改进算法 在上面的过程中,我们实际上采用的是给定的一个值去和我们读入的二进制文件进行异或,那么我们是否能用一个随机数去代替这种约定呢?...答案是可以的,首先我们采用的是int类型的变量去存储,那么能表示的范围是:正负21亿的可表示数字,具体的代码如下: //产生随机数的方法 import java.util.*; public class...产生的这个随机数我们应该可以保存,供加密和解密者使用 System.out.println(“随机数为:”+num); } } 改进后的加密算法 加密端代码: import java.io.*; import...System.out.println(“随机数为:”+num); //在读的过程中,将读到的数据异或一个数字,这个数字应该是由某种加密算法生成的,在这里我仅仅简单的编一个数字928(我的生日),然后进行异或
于是我翻看以前学习时做的一些笔记,整理了一下,得到了一个关于异或运算交换变量变量值的笔记。 首先来看下面三组表达式,看起来他们都能实现交换两个变量的值。...过了很长时间之后,在意个偶然的机会中,我在一个关于Java谜题的手册中看到了这个问题,原来这还是Java比较经典的谜题之一了。 原来,事情是这样的。...但是有一点可以肯定:它在Java中肯定是不能正确运行的。 Java语言规范描述到:操作符的操作数是从左向右求值的。...为了求表达式 x ^= expr的值,x的值是在计算expr之前被提取的,并且这两个值的异或结果被赋给变量x。...tmp3 ; // 第二个赋值:存储最初的x值到y中 x = tmp1 ^ y ; // 第一个赋值:存储0到x中 从上面的代码可以看出,其实a之所以会为0,是因为a^a造成的,我们知道,两个相同的值异或其值为
其实在以前没接触这些内容的时候,脸上是懵逼的表情,完全不明白异或是为了干什么。...其实用简单的语言来说,接收数据的异或校验相当于解密,发送时候的校验位相当于加密; 官方解释是:其他数据信息传递中为保证数据传递正确可靠,在数据帧中常加载异或校验位(个人理解怕传输过程中出现数据丢失损坏的情况...,所以加校验保证了数据的准确性) 言归正传java中怎么异或校验 1、发送数据 byte[] rece = new byte[6]; rece[0] = 0x55;...] = (byte) (rece[0] ^ rece[1] ^ rece[2] ^ rece[3] ^ rece[4]); 比如说有一个byte数组,第五位是校验位,那么校验位的就是前面所有位数数据的异或...; 还是以rece[5]为校验位举例:当校验位与前面所有数据进行异或,最后得到的异或值=0时,表示数据是有效的。
在二进制中,异或(XOR)具有以下性质: 相同的数,异或以后为0,不同的数,异或以后为1. 0与任何数相异或,结果都是原数本身 例如: >>> 0 ^ 0 0 >>> 0 ^ 1 1 >>> 0 ^...9 9 >>> 7 ^ 7 0 异或操作满足交换率 >>> 7 ^ 6 ^ 7 6 >>> (7 ^ 7) ^ 6 6 使用这个性质,可以完成下面这个算法题: 有一个无序的列表,里面有2n + 1个数。...使用时间复杂度为O(1),空间复杂度为O(1)的算法找出这个只出现1次的数。 例如这个列表为: [1,1,3,5,2,6,5,3,2],其中的 1、 3、 2、 5都出现了2次,而 6只出现了1次。...使用异或算法非常简单: >>> a = [1, 1, 3, 5, 2, 6, 5, 3, 2] >>> s = 0 >>> for n in a: ... s = s ^ n >>> s 6
static void main(String[] args) { for(int i=0;i<100;i++) { String key="android"+i; String dataString="java...System.out.println("=============="); for(int i=0;i<100;i++) { String key="android"; String dataString="java
使用加密的强伪随机数生成器生成该 UUID。...(Math.random()*(max-min)+min); ②Random类 使用java.util.Random类来产生一个随机数发生器,这个也是我们在j2me的程序里经常用的一个取随机数的方法。...new Random(); int randomNumber = random.nextInt(max)%(max-min+1) + min; ③ThreadLocalRandom 在多线程下,使用 java.util.Random...多线程下获取[1,100)的随机数,如下代码 import java.util.concurrent.ThreadLocalRandom; public class ThreadLocalRandomDemo...还可以将其对某些数取模,就能限制随机数的范围;此方式在循环中同时产生多个随机数时,会是相同的值,有一定的局限性!
02 Java架构方向人才 ● 系统的技术选型和可行性评估; 你这可以理解为:你家的房子户型设置,硬件软件配置必须要有自己的经验,装修完之后总得适用,不浪费成本,偏激一点总不能到处是柜子。...● 熟悉linux,能熟练应用shell/python等脚本语言; ● 扎实的Java基础知识,熟悉IO、多线程及并发技术; ● 熟练掌握redis、mongodb、netty、kafka等中间件; ●...04 两者侧重点不同 ★ Java架构 n 开发语言 n 分布式,高可用 n 设计模式 n 支撑业务的系统架构或者工具集 ★ 大数据架构 n 不局限开发语言,有Java,Scala,Python,Go
概述: 作者对比c++和java ,指出相比c++ ,Java 编程不需要开发者自己管理创建对象的内存,因为借助jvm的自动管理内存机制的帮助,开发人员可以不考虑这些。...但交给Java虚拟机一旦出现内存泄漏和溢出的问题,如果不了解jvm的原理和运行机制,排查出来也是很有难度的,jvm也是成为了Java开发人员需要了解学习的原因,自己觉得学习jvm对 自己编写的代码的运行原理底层能有深入的了解...,对理解Java语言有很大帮助。...#Java虚拟机栈 栈,存放基本数据类型的值,及引用数据类型的地址,
即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0 按位异或的3个特点: (1) 0^0=0,0^1=1 0异或任何数=任何数 (2) 1^0=1,1^1=0 1异或任何数-...任何数取反 (3) 任何数异或自己=把自己置0 按位异或的几个常见用途: (1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。...说明 ^ 运算符查看两个表达式的二进制表示法的值,并执行按位异或。...两个数按位异或意思就是从个位开始,一位一位的比. 如果两个数相应的位上一样,结果就是0,不一样就是1 所以111^101=010 那加密的过程就是逐个字符跟那个secret字符异或运算....解密的过程就是密文再跟同一个字符异或运算 010^101=111 至于为什么密文再次异或就变原文了,这个稍微想下就知道了.. posted on 2013-07-18 18:55 奋斗成就男人 阅读(158
领取专属 10元无门槛券
手把手带您无忧上云