两个二进制数异或结果 是 这两个二进制数差的绝对值,即表达为如下:
a^b = |a-b| (按位相减取绝对值,再按位累加)
解答过程:
二进制数a与b异或,即a和b两个数按位进行,如果对应位相同,即为0(这个时候相当于对应位算术相减),如果不相同,即为1(这个时候相当于对应位算术相减的绝对值)。由于二进制每个位只有两种状态,要么是0,要么是1,则按位异或操作可以表达为按位相减取绝对值,再按位累加。
二进制下异或运算与二进制数中1个数的奇偶性联系,也就是说有三种情况,1.拥有奇数个1的二进制数与拥有奇数个1的二进制数的异或运算。2.拥有奇数个1的二进制数与拥有偶数个1的二进制数的异或运算。3.拥有偶数个1的二进制数与拥有偶数个1的二进制数的异或运算。
假设前提:总位数为w,数一拥有x个0,数二拥有y个0,数一中0匹配了数二中k个1(k<=x)。
因为异或运算产生1只有两种情况:数一的0与数二的1,数一的1与数二的0.
第一种情况1的个数:k.
第二种情况1的个数:数一中0与数二中0匹配的个数为x-k,这不会产生1,这时1的个数应为:y-(x-k)
故1的总个数为:k+y-(x-k)=2*k+y-x
此时可以分三种情况讨论:
1.拥有奇数个1的二进制数与拥有奇数个1的二进制数的异或运算:应为w为偶数位,所以x,y均为奇数,此时y-x结果为偶数。
2.拥有奇数个1的二进制数与拥有偶数个1的二进制数的异或运算:同上,此时x为奇数,y为偶数,y-x结果为奇数。
3.拥有偶数个1的二进制数与拥有偶数个1的二进制数的异或运算:此时x为偶数,y为偶数,y-x为偶数或0.
1.为什么需要位运算?
计算机里的数字表示方式和存储格式就是二进制的,所以用二进制,速度很快
2.十进制转二进制
d:代表十进制
4(d):0100
8(d):01000
3.十进制转二进制 (小技巧)
一般算比较小的数字的话,就先找小于并且临这个数最近的2的N次方。然后依次。
比如 37 32 + 4 + 1 对应的就是 100101(32 16 8 4 2 1 有的写1,反之写0)
小技巧 参考 :
https://www.jianshu.com/p/a4f4bb58685d,
位运算符
含义 | 运算符 | 例子 |
---|---|---|
带符号左移(乘2) | << | 0011 => 0110 |
带符号右移(除2),最高位(符号位)不动 | >> | 0011 => 0001 |
不带符号右移,最高位只用0补 | >>> | 0011 => 0001 |
或 | | | 0011|1011=>1011 |
与 | & | 0011&1011=>0011 |
取反 | ~ | ~0011=>1100 |
异或 (无进位相加) | ^ | 0011^1011=>1000 |
X ^ 0 = X
X ^ 1s = ~X //1s代表全1 , 1s=~0
X ^ (~X) = 1s
X ^ X = 0
A=A^B , B=A^B , A=A^B // 不用额外变量交换A和B的值
1.将x右边的n位清零:x & (~0 << n) 【~0就是1s,向左移n位后,只留下左边的高位,右边低位的n都是0】
2.获取x的第n位值(0或者1): (x >> n) & 1 【x右移n位后,再&1 ,就得到第n位时0还是1了】
3.获取x的第n位的幂值:x & ( 1<<(n-1) ) 【把1左移到高位,再 &x 】
4.仅将第n位 置为1: x | (1<<n) 【1<<n 变成 000000100000】
5.仅将第n位 置为0:x & (~(1<<n ) )
6.将x最高位到第n位(含)清零: x & ((1<<n)-1)
7.将第n位到第0位(含)清零:x & (~((1<<(n+1))-1))
(1) 判断奇偶:
x%2==1 ==> (x&1)==1
x%2==0 ==> (x&1)==0
(2) x>>1 ==> x/2
mid = (left+right)/2 ==> mid = (left+right)>>1
(3) x= x&(x-1) //清零最低位的1
(4) x&-x //得到最低位的1 【4就是0000 0100,-4就是 1000 0100 】
(5)x&~x ==>0
【面试题目 -亢龙有悔整理】两个二进制数异或结果是多少?
a^b = |a-b| (按位相减取绝对值,再按位累加)
两个二进制数异或结果 是 这两个二进制数差的绝对值,即表达为如下:
a^b = |a-b| (按位相减取绝对值,再按位累加)
解答过程:
二进制数a与b异或,即a和b两个数按位进行,如果对应位相同,即为0(这个时候相当于对应位算术相减),如果不相同,即为1(这个时候相当于对应位算术相减的绝对值)。由于二进制每个位只有两种状态,要么是0,要么是1,则按位异或操作可以表达为按位相减取绝对值,再按位累加。
异或运算又称XOR或EOR 二进制中为对应位进行运算,若相同则为0,不同则为1.
简单性质:
- 0与x(任何数)异或运算得x
- 可以使用交换律和结合律
应用1:判断两个数是否相等
根据异或运算的定义,当两个数相同时,运算结果为0
应用2:通过异或运算将重复的两个数去除。
例:https://leetcode.com/problems/single-number/
应用3:交换两个变量的值without额外空间
a^=b
b^=a
a^=b
应用4:异或加密
转载于:https://www.cnblogs.com/aksdenjoy/p/5997526.html