按位异或运算符
两个操作数中,如果两个相应位相同,则结果为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() 是对数组内所有元素做异或,则有:
xor(A) == xor(B) ^ x
所以:
-
xor(B) ^ xor(A) == xor(B) ^ xor(B) ^ x ==
0
^ x == x
-
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 )
分享到:
相关推荐
异或运算符是二元运算符,用于比较两个二进制数的每一位。如果两个相应的二进制位不同,则结果为1,否则结果为0。这可以用 truth table 来表示: | A | B | A ^ B | | --- | --- | --- | | 0 | 0 | 0 | | 0 | 1 | 1...
在Java中,我们可以利用`Integer.parseInt()`方法将十六进制字符串转换为整数,再使用位运算符`^`来进行异或操作。首先,我们需要将输入的十六进制字符串按空格分隔,然后对每个分隔后的十六进制数进行异或运算。...
(1)按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。 10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6 (2)通过按位异或运算,可以...
本压缩包文件“按位异或校验和计算器.rar”提供了一个用于计算异或校验和的工具,特别是针对十六进制数值的异或操作。 异或操作的基本概念是:如果两个输入位相同,结果为0;如果输入位不同,结果为1。用数学符号...
异或运算符(^)在Java中用于执行位操作。当两个位相同,异或结果为0;当两个位不同,结果为1。这个特性使得异或运算在加密领域中有其独特的作用。在加密字符串时,通常选择一个密钥(一个数值),然后将字符串的每...
### 按位与、按位或、按位异或运算详解 #### 一、按位与运算(Bitwise AND) **定义与功能** 按位与运算符`&`是一种双目运算符,用于实现两个数值对应二进位的与运算。如果两个二进位都为1,则结果为1;否则结果...
异或运算符(^)在二进制级别上对两个数进行操作,如果对应位相同,结果为0;如果对应位不同,结果为1。例如,二进制数字1010和1100进行异或操作,将得到1110。 在C#中,按位异或校验和的计算通常涉及以下几个步骤...
在本文中,我们将深入探讨C++中的异或运算符及其在解决LeetCode问题时的应用。异或运算符("^")是C++中的一个二元运算符,它遵循以下规则:相同为0,相异为1。这意味着,如果两个操作数的位在任何位置上都是相同的...
按位“异或”运算符 (^)是对两个表达式执行按位异或。使用方法: 代码如下: result = expression1 ^ expression2 其中result是任何变量。 expression1是任何表达式。 expression2是任何表达式。 按位“异或”运算符...
十六进制字符串的按位异或校验和是其中一种简单但有效的技术,广泛应用于通信协议、文件校验等领域。下面将详细介绍这个话题。 首先,十六进制是一种表示数字的方式,它使用16个符号(0-9和A-F)来代表从0到15的...
在 Java 中,异或运算符表示为“^”,它接受两个操作数,并将它们的二进制表示进行按位异或操作。 基本概念 异或运算符的规则是,如果两个对应的位不同,则结果为 1,否则为 0。这就是说,如果两个输入位相同,则...
代码如下: int a = 5; int b = 30; Console.WriteLine(a^b); Console.ReadKey(); 输出结果是27 这是因为 5的二进制是0000 ... 您可能感兴趣的文章:深入理解C++移位运算符C# 位运算符整理C++位运算符详解(异或
按位异或运算符 (^) 是指假设参与运算的两个二进制位值一样则为0,否则为1。这个运算符可以用来交换两个值,不用临时变量。 例子: * 交换两个值,不用临时变量:可以使用按位异或运算符交换两个值。 四、取反...
在C语言中,我们可以使用"^"运算符来进行按位异或。假设我们有两个整数a和b,表达式a ^ b将返回它们按位异或的结果。 在8051微控制器中,P0口的每一位都可以独立设置为0或1。为了在P0口上显示一个8位的二进制数,...
最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或运算结果最新单片机仿真 用P0口显示按位异或...
在编程语言中,按位与(&), 按位或(|), 按位异或(^)以及位移运算符(, >>)是用于处理二进制数据的基本操作。这些运算符允许我们直接对整数类型的二进制位进行操作,这对于底层编程和特定的算法设计非常有用。 1. **按...
C语言提供了6个位操作运算符,包括按位与、按位或、按位异或、取反、左移和右移。 1. 按位与运算符 (&) 按位与运算符(&)是指:参加运算的两个数据,按二进制位进行 “与”运算。如果两个相应的二进制位都为1,...