`

[Java]按位异或运算符一点小记(转)

阅读更多

按位异或运算符
两个操作数中,如果两个相应位相同,则结果为0,否则为1
即:
    0^0=0, 1^0=1, 0^1=1, 1^1=0
例如:
    00101010^00010111=00111101

1)如果需使用一个整数的某些特定的位翻转,可使用另一个
相应位为1的操作数与原来的整数进行按位异或操作实现。
下面的例子对整数变量 ii的第四位翻转
int revertFouth=ii^8;
其余位则没有变化

2)通过按位异或运算可以实现两个值的交换。而不使用临
时变量。例如交换两个整数a,b的值可通过下列语句实现:

int a=15,b=24;
//a的最右边8位为00001111,b的最右边8位为00011000
//a和b其余位为0,下同
a=a^b; //a的最右边8位为00010111,a=23
b=b^a; //b的最右边8位为00001111,b=15
a=a^b; //a的最右边8位为00011000,a=24

*位逻辑运算表达式返回两个操作数中数据长度较长的数据
类型
其中较小的左侧将被填满,若为整数,则填满0,
若为负数,则左侧填满1

 

首先复习一下异或运算(^)的性质:它满足交换律、结合律。

此处有一个经典的运用:现在有一万(1-10000)的个数 ,从中拿掉 一个数,问怎么才能找出拿掉的数

设 最初的数组是 A,
    拿掉 x 之后的数组是 B,
    xor() 是对数组内所有元素做异或,则有:

  1. xor(A) == xor(B) ^ x  
Fake代码
  1. xor(A) == xor(B) ^ x  
xor(A) == xor(B) ^ x


所以:

  1. xor(B) ^ xor(A) == xor(B) ^ xor(B) ^ x == 0 ^ x == x  
Fake代码
  1. xor(B) ^ xor(A) == xor(B) ^ xor(B) ^ x ==  0  ^ x == x  
xor(B) ^ xor(A) == xor(B) ^ xor(B) ^ x == 0 ^ x == x


结论:
A 和 B 两个数组共 19999 个数,全部用来做异或,结果就是去掉的那个数 x。


(注:设 A = {a1, a2, a3, .... a10000}, 则 array_xor(A) = a1 ^ a2 ^ a3 ^ ... ^ a10000 )

分享到:
评论

相关推荐

    计算机的异或运算符.pdf

    异或运算符是二元运算符,用于比较两个二进制数的每一位。如果两个相应的二进制位不同,则结果为1,否则结果为0。这可以用 truth table 来表示: | A | B | A ^ B | | --- | --- | --- | | 0 | 0 | 0 | | 0 | 1 | 1...

    十六进制字符串按位异或运算工具和java位异或运算

    在Java中,我们可以利用`Integer.parseInt()`方法将十六进制字符串转换为整数,再使用位运算符`^`来进行异或操作。首先,我们需要将输入的十六进制字符串按空格分隔,然后对每个分隔后的十六进制数进行异或运算。...

    C++按位异或运算符的使用介绍

    (1)按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。 10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6   (2)通过按位异或运算,可以...

    按位异或校验和计算器.rar_异或_异或在线计算_异或在线运算_按位异或_校验和计算器

    本压缩包文件“按位异或校验和计算器.rar”提供了一个用于计算异或校验和的工具,特别是针对十六进制数值的异或操作。 异或操作的基本概念是:如果两个输入位相同,结果为0;如果输入位不同,结果为1。用数学符号...

    Java中使用异或运算符实现加密字符串

    异或运算符(^)在Java中用于执行位操作。当两个位相同,异或结果为0;当两个位不同,结果为1。这个特性使得异或运算在加密领域中有其独特的作用。在加密字符串时,通常选择一个密钥(一个数值),然后将字符串的每...

    按位与_按位或_按位异或_运算

    ### 按位与、按位或、按位异或运算详解 #### 一、按位与运算(Bitwise AND) **定义与功能** 按位与运算符`&`是一种双目运算符,用于实现两个数值对应二进位的与运算。如果两个二进位都为1,则结果为1;否则结果...

    按位异或校验和计算器

    异或运算符(^)在二进制级别上对两个数进行操作,如果对应位相同,结果为0;如果对应位不同,结果为1。例如,二进制数字1010和1100进行异或操作,将得到1110。 在C#中,按位异或校验和的计算通常涉及以下几个步骤...

    C++:异或运算符大全

    在本文中,我们将深入探讨C++中的异或运算符及其在解决LeetCode问题时的应用。异或运算符("^")是C++中的一个二元运算符,它遵循以下规则:相同为0,相异为1。这意味着,如果两个操作数的位在任何位置上都是相同的...

    JavaScript中按位“异或”运算符使用介绍

    按位“异或”运算符 (^)是对两个表达式执行按位异或。使用方法: 代码如下: result = expression1 ^ expression2 其中result是任何变量。 expression1是任何表达式。 expression2是任何表达式。 按位“异或”运算符...

    十六进制字符串按位异或校验和和校验工具

    十六进制字符串的按位异或校验和是其中一种简单但有效的技术,广泛应用于通信协议、文件校验等领域。下面将详细介绍这个话题。 首先,十六进制是一种表示数字的方式,它使用16个符号(0-9和A-F)来代表从0到15的...

    java异或源码范例和详细说明(由浅入深,深度解读在资料后半部分).docx

    在 Java 中,异或运算符表示为“^”,它接受两个操作数,并将它们的二进制表示进行按位异或操作。 基本概念 异或运算符的规则是,如果两个对应的位不同,则结果为 1,否则为 0。这就是说,如果两个输入位相同,则...

    c#的异或运算符介绍

    代码如下: int a = 5; int b = 30; Console.WriteLine(a^b); Console.ReadKey(); 输出结果是27 这是因为 5的二进制是0000 ... 您可能感兴趣的文章:深入理解C++移位运算符C# 位运算符整理C++位运算符详解(异或

    C语言位运算符:与、或、异或、取反、左移和右移.docx

    按位异或运算符 (^) 是指假设参与运算的两个二进制位值一样则为0,否则为1。这个运算符可以用来交换两个值,不用临时变量。 例子: * 交换两个值,不用临时变量:可以使用按位异或运算符交换两个值。 四、取反...

    C语言15:用P0口显示按位异或运算结果.rar

    在C语言中,我们可以使用"^"运算符来进行按位异或。假设我们有两个整数a和b,表达式a ^ b将返回它们按位异或的结果。 在8051微控制器中,P0口的每一位都可以独立设置为0或1。为了在P0口上显示一个8位的二进制数,...

    最新单片机仿真 用P0口显示按位异或运算结果

    最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或...

    按位与 按位或 按位异或 运算.docx

    在编程语言中,按位与(&), 按位或(|), 按位异或(^)以及位移运算符(, >>)是用于处理二进制数据的基本操作。这些运算符允许我们直接对整数类型的二进制位进行操作,这对于底层编程和特定的算法设计非常有用。 1. **按...

    C语言位运算符与或异或取反左移和右移.pdf

    C语言提供了6个位操作运算符,包括按位与、按位或、按位异或、取反、左移和右移。 1. 按位与运算符 (&) 按位与运算符(&)是指:参加运算的两个数据,按二进制位进行 “与”运算。如果两个相应的二进制位都为1,...

Global site tag (gtag.js) - Google Analytics