位异或运算 位异或 位异或 位异或运算在一些场景中使用的话,会得到意想不到的效果。...比如通过三次 位异或 运算可以用于交换两个数的值: // 通过三次位运算可以实现两个整数的交换 int a = 12; int b = 10; a = a ^ b; //...: 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0 即位异或运算相同为0, 不同为1(无进位相加) 位异或运算满足交换律和结合律 a ^ b = b ^ a...(a ^ b) ^ c = a ^ (b ^ c) 注意:特殊情况 a ^ a = 0 a ^ 0 = a 可以通过以下的Java代码看异或运算的一些使用示例: /* 位异或运算...0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0 位异或运算相同为0, 不同为1(无进位相加) 位异或运算满足交换律和结合律
大家好,又见面了,我是你们的朋友全栈君。<script type=”text/javascript”> var num1=25; var num2=3; ...
,寄希望下次看到的时候能立马想起来而不是再去理解一次 运算符 含义 描述(位运算,基于二进制表示) 示例 & 按位与 只有参与运算的两位均为1时,结果才为1,否则为0 a与b:$a & $b | 按位或...只有参与运算的两位均为0时,结果才为0,否则为1 a或b:$a | $b ^ 按位异或 只有参与运算的两位不同时,结果才为1,否则为0 a异或b:$a ^ $b ~ 按位非(取反) 将用二进制表示的操作数中为...1的位转为0,为0的为转为1 a非:~$a << 左移 将左边的操作数在内存中的二进制数据向左移动指定位数,右侧移空的位用0补齐 a左移4位:$a<<4 >> 右移 将左边的操作数在内存中的二进制数据向右移动指定位数...,左侧移空的位用0补齐 a右移4位:$a>>4 图示说明: 定义: A=81(d)=01010001(b) B=9(d)=00001001(b) 按位与(&) 规则:0&0=0,0&1=0,1&0=0...,1&1=1 A&B运算结果:1(d)=00000001(b) 按位或(|) 规则:0|0=0,0|1=1,1|0=1,1| 1=1 A|B运算结果:89(d)=01011001(b) 按位异或(
文章摘要: 1、按位异或,可以简单理解成:不进位加法。即:1+1=0;0+0=0;1+0 =1; 2、任何数和自己异或结果为零。 3、按位异或自反性。两次运算操作,可以将最后的结果还原。...4、任何数和0做异或值不变,和1异或结果为原操作数取反。 5、交换律。不使用中间变量,交换两个数。 一、按位异或具有自反性。即:对同一个数据,进行两次按位异或操作,等于数据本身。...【只允许使用按位异或】 分析: 1、连续两次操作电灯开关,电灯将处于操作前状态。 2、关闭所有开关。任何数和自己异或结果为零。 实现: 1、定义“大房子”类。...大房子.次卧灯); hourse.操作电灯开关(大房子.走廊灯); //5、一键关闭所有灯 hourse.让所有的灯关闭(); System.out.println(hourse); 三、总结: 妙用按位异或...本例演示了按位异或的自反性,异或还有其他妙用,我们可以总结如下: 1、按位异或,可以简单理解成:不进位加法。即:1+1=0;0+0=0;1+0 =1; 2、任何数和自己异或结果为零。
Table of Contents XOR是什么 XOR的运算规则 XOR的应用 References XOR是什么 是计算机的逻辑异或运算 XOR的运算规则 相同为0, 不同为1 1000 ^ 1001...的运算过程如下 1001 1000 =0001 XOR的应用 ---- 判断两个数是否相等 通过判断两个数异或结果是否为0来判断两个数是否相等 int a=10,b=20,c=10; a^b...0 : (h = key.hashCode()) ^ (h >>> 16); } //h >>> 16 是为了将高位移向地位 //异或运算 是因为index = (n-1) &...hash; n是数组的长度, 为了防止hash散列冲突 //java7的是hash % n, java8用无符号右移是因为位运算快 References https://hackernoon.com
Javascript有算数操作符,赋值操作符,比较操作符,逻辑操作符,同时也有位操作符。 引子 先想一想,如下,该输出什么答案?...与& 与运算法则:两位同时为“1”,结果才为“1”,否则为0 5 & 1 = 1 或| 或运算法则:两位其中一个为“1”,结果为“1”,否则为0 5| 1 = 5 非 非运算法则:单目运算符 二进制原码...先求反码:1000 0000 0000 0000 0000 0000 0000 0101 2.再求补码:1000 0000 0000 0000 0000 0000 0000 0110 最高位代表符号位...1 表示负数,0 表示正数 ~5 = -6 异或^ 异或运算法则:两位不同,结果为“1”,否则为0 5^1 = 4 左移 左移运算法则:将数值向左移动若干位,用0补足 5<< 1 = 10 右移...右移运算法则:将数值向右移动若干位 5>>1 = 2
,异或的规则是转换成二进制比较,相同为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。
逻辑或(||) 运算符两边的表达式的值都为false运算结果为false, 其余情况为true。 按位与(&) 计算方法: 参加运算的两个数,换算为二进制(0、1)后,进行与运算。...只有当 相应位上全部为1时取1, 存在0时为0。 011 & 110 011 110 --- 010 按位或(|) 计算方法: 参加运算的两个数,换算为二进制(0、1)后,进行或运算。...只要当 相应位上存在1时取1, 全部为0时为0。 011 | 110 011 110 --- 111 按位同或(⊙) 计算方法: 参加运算的两个数,换算为二进制(0、1)后,进行异或运算。...只有当 相应位上的数字相同时取1, 不相同为0。 011 ⊙ 110 011 110 --- 010 按位异或(^) 计算方法: 参加运算的两个数,换算为二进制(0、1)后,进行异或运算。...2)<5; cout<<a<<" "<<b<<endl; //输出0 1 int c = 1ll<<3; cout<<c<<endl; //输出8 ll防止在往前移位的时候爆掉int 异或运算的性质
^表示按位异或运算符,顾名思义,相异,即不同则为1,反之为0 例如15和16进行异或运算,运算过程如下:15 0000 0000 0000 0000 0000 0000 0000 1111 16...0000 0000 0000 0000 0001 0000 ^ —————————————— 0000 0000 0000 0000 0000 0000 0001 1111 可以看到,经过按位异或运算后...大家务必弄清楚运算过程,然后再上机验证,代码如下:#include int main() { int a; a=15^16; printf(“a=%d\n”,a); return 0; } 运算结果为:a=31 异或运算符的作用指定位数的翻转...如想对某个数字的低4位进行翻转,则可以将这个数字与15(二进制为00001111)进行按位异或运算,既可以将原数字的低四位进行翻转,即高四位不变,低四位0变1,1变0 与0异或还是原值 大家可以自行实验...,一个数字与0进行异或,结果还是原值 交换两个数字 除了之前我们学习交换两个数字需要第三个变量做中介之外,如今可以通过异或运算进行,代码如下:#include int swap(int *a,int *
按位或运算符(|) 参加运算的两个对象,按二进制位进行“或”运算。...另,负数按补码形式参加按位或运算。 “或运算”特殊作用: (1)常用来对一个数据的某些位置1。 方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。...例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。 异或运算符(^) 参加运算的两个数据,按二进制位进行“异或”运算。...“异或运算”的特殊作用: (1)使特定位翻转找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。...例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。 (2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。
按位与: 0&0=0; 0&1=0; 1&0=0; 1&1=1; 按位或: 0|0=0; 0|1=1; 1|0=1; 1|1=1; 按位异或,在或的基础上1 1也为0:...0^0=0; 0^1=1; 1^0=1; 1^1=0; 1.一个int型字段,存储十进制的数字,比如说是5 那么该数字转成二进制是101,我自己定义从左往右数, 第一位1,代表某功能自动转发开启...第二位0,代表自动删除关闭 第三位1,代表自动保存开启 2.判断第三位是否开启自动保存的代码 ($userStatus & pow(2,3-1))!...=0 3.pow是指数表达式函数,2的2次方,转成二进制是0100,按位与0101 & 0100 是0100 十进制为4,因此不等于0为true 4.设置某一位的值,如果要设置为1代码是 $userStatus...| pow(2,3-1) 原始值为 0001,要设置第三位为1,0001 | 0100 为0101 5.把某一位设置为0,代码是 $userStatus ^ pow(2,3-1) 0101 ^ 0100
本文主要介绍C语言中按位与、按位或、按位异或三个操作符的使用。 该三个操作符中的位,代表的是二进制位。 按位与:& 运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。...按位或:| 运算规则:只有两个数的二进制同时为0,结果才为0,否则为1。...按位异或:^ 运算规则:当两个数的二进制相同时,结果为0,否则为1。...(负数按补码形式参加按位异或运算) 实例: #include int main() { int a = -3 ^ 5; printf("%d ", a); return 0;...经过按位异或得到的补码为:1111 1111 1111 1111 1111 1111 1111 1000 故输出结果为-8.
位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 ~取反为单目,其余都是双目运算符。...1,该位的结果值为1 ^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0 << 左移 用来将一个数的各二进制位全部左移...若要把这结果赋给变量j,可写成: j = 017|j (3)按位异或运算符(^) 按位异或运算将两个运算分量的对应位按位遵照以下规则进行计算: 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 =...异或运算的意思是求两个运算分量相应位值是否相异,相异的为1,相同的为0。按位异或运算的典型用法是求一个位串信息的某几位信息的反。...如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。
按位异或运算: 规律:无论0或1,异或1取反,异或0不变 变量交换: 题一:给定两个数 a 和 b ,用异或运算交换它们的值。...思路: 1)中间量t = a^b 2) b = tb,相当于abb,根据异或性质知道ab^b = a,所以b = t^b就是b = a (异或性质:异或两次不变) 3)a = t^a,道理同上...思路: 根据异或的性质,两个一样的数异或结果为零。也就是所有出现偶数次的数异或都为零,那么把这 n 个数都异或一下,得到的数就一定是一个出现奇数次的数了。...这里最终偶数次的数异或偶数次的偶数结果为0,0再异或奇数次的数结果为其本身,就是这个道理 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141615.html原文链接
例92:学习C语言按位异或^ 。 解题思路:按位与&、按位或|、按位异或^,与1进行位与&运算,值保持不变;与0进行位与&运算,值清0;按位与&常用于将整型变量中某些位清0,而其他位保持不变。...与1进行位或|运算,值置1;与0进行位或|运算,值保持不变;按位或|常用于将整型变量中某些位置1,而其他位保持不变。...与1进行位异或^运算,值取反;与0进行位异或^运算,值保持不变;按位异或^常用于将整型变量中某些位取反,而其他位保持不变。
即:0^0=0, 1^0=1, 0^1=1, 1^1=0 例如:10100001^00010001=10110000 0^0=0,0^1=1 0异或任何数=任何数 1^0=1,1^1=0 1异或任何数...-任何数取反 任何数异或自己=把自己置0 (1)按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。 ...10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6 (2)通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。...10100001,b=00000110 a=a^b; //a=10100111 b=b^a; //b=10100001 a=a^b; //a=00000110 (3)异或运算符的特点是...:数a两次异或同一个数b(a=a^b^b)仍然为原值a.
即: 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字符异或运算.
按位取反~运算 首先我们来看按位取反的概念 按位取反运算符:对数据的每个二进制位取反,即把0变成1,把1变成0....即~x=-x-1 这里按照定义 9的二进制为00001001 其按位取反为11110110 结果为-10 这个过程没有任何问题,但是如果忘记了负数的二进制表达方式,就会对这个结果产生疑问,为什么11110110...理解按位取反的关键是理解11110110为什么表示-10,也就是负数的二进制表达方式。 现在计算机普遍使用补码表示负数。 知道补码,求源码的方式是:值取反再加1。...补码的第一位符号位决定了源码的正负,第一位为0源码为正,第一位为1源码为负。 现在我们可以理解上面那个例子,9按位取反后得到11110110,其第一位为1,源码为负值。
/*C语言 按位异或实现加法*/#include#include#include voidtest1() {int a = 2;int b = 3;int cand = 0;int cxor = 0;int...c = 0;//实现c=a+b//1.不考虑进位,按位计算各位累加(用异或实现),得到值xor; cxor = a^b;/*实现说明: a的值是2,对应计算机中补码是 0000 0000 0000 0000...0000 0000 0000 0010 0000 0000 0000 0000 0000 0000 0000 0011 0000 0000 0000 0000 0000 0000 0000 0001 —>异或结果...即cand的值*/ //3.进行求和计算 c = cxor + (cand << 1);/*实现说明: 0000 0000 0000 0000 0000 0000 0000 0001 —>异或结果 0000...即cand的值*/ //3.进行求和计算 c = cxor + (cand << 1);/*实现说明: 1 111 1111 1111 1111 1111 1111 1111 1101 —>异或结果 0
异或运算: 首先异或表示当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为1相同则为0.该方法被广泛推广用来统计一个数的1的位数!...0=1,1^1=0 1异或任何数-任何数取反 (3) 任何数异或自己=把自己置0 按位异或的几个常见用途: (1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与...00000110进行按位异或运算。 ...三、异或运算(^) 1、概念:参加运算的两个数据,按二进制位进行“异或”运算 2、运算规则:0^0=0;0^1=1;1^0=1;1^1=0;即:参加运算的两个对象,如果两个相应位为“异”(值不同...,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。
领取专属 10元无门槛券
手把手带您无忧上云