简介
python 中的位运算符
1|1=1 0|1=1 1|0=1 0|0 = 0
即参加运算的两个对象只要有一个为1,其值为1。
4|3= 7 (转化为二进制至关于 100 | 011 = 111 )
复制代码
1&1=1 0&1=0 0&0=0 1&0=0
即:两位同时为“1”,结果才为“1”,不然为0
4&3= 0 (转化为二进制至关于 100 & 011 = 000 )
复制代码
1^1=0 0^1=1 1^0=1 0^0=0
即:两位相同为“0”,不一样才为“1”
4^3 = 7 (转化为二进制至关于 100 ^ 011 = 111)
异或的几条性质:
一、交换律 a^b = b^a
二、结合律 a^b^c = a^(b^c)
三、对于任何数x,都有x^x=0,x^0=x
四、自反性: a^b^b=a^0=a;
复制代码
将二进制数+1以后乘以-1,x的按位翻转是-(x+1)
数字 1 在计算机中表示是由计算机字符编码决定的[1]
utf-8,对万国码进行按类压缩,优化存放空间
数字1:00000001,8位
汉字:3个字节
~1 = ~(0000 0001) 至关于 (1111 1110) 可能我会觉得 这个数字是至关大的一个数了,可是用python解释器打印
倒是-2 缘由是由于计算机在存储数值中有一个符号位 正数的符号位是0 负数的符号位为1 而计算机中有涉及源码 反码补码中
咱们通常用补码表示负数,因此,对-2绝对值原码取反加1,获得1111 1101+1 = 1111 1110 反过来就是 1
复制代码
1 << 1 = 2 2<< 1 = 4
左移1位后a = a *2
复制代码
1 >> 1 = 0 2 >> 1 = 1
左移1位后a = a / 2
复制代码
相关问题
def conver(n):
""" 10进制转2进制 """
if n==0:
return 0
temp = []
while n:
temp.append(n%2)
n = n>>1
temp.reverse()
return "".join([str(x) for x in temp])
def reconver(str1):
""" 2进制转10进制 """
temp = [int(x)for x in list(str1)]
temp.reverse()
sum = 0
for i in range(0,len(temp)):
sum += pow(2,i) * temp[i]
return sum
复制代码
def is_odd(n):
if n&1 == 1:
print("奇数")
else:
print("偶数")
复制代码
5 ( 101 )
5 & 4 (101 & 100 = 100 )
4 & 3 (100 & 011 = 000)
>>>>> 2
def totle_num(n):
""" 整数n的二进制中1的个数 n&(n-1)这个式子什么做用?把n的二进制数字中最右边的1变为0 """
count = 0
while n:
count+=1
n = n&(n-1)
print(count)
复制代码
def singleNumber(nums):
""" [0,1,2,0,1,2,3] 给定一个非空整数列表,除了某个元素只出现一次之外,其他每一个元素均出现两次。找出那个只出现了一次的元素。leetcode 136 """
ret = 0
for x in nums:
ret = ret ^x
return ret
复制代码
1. 给定一个包含 0..n 中 n 个数的列表,找出 0 .. n 中没有出如今序列中的那个数。 leetcode 268
[1,3,0] 2
0^1^2^3^1^3^0 2
ret = 0
for i in range(0,n+1)
ret ^= i
for i in range(0,len(nums)):
ret ^= nums[i]
return ret
2. 1-n 放在含有 n+1 个元素的列表中,只有惟一的一个元素值重复,其它均只出现一次.
每一个列表元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间。 进阶版 leetcode 287
[1,2,2,3] 2
0^1^2^3^1^2^2^3 = 2
复制代码
def readVarint(trans):
result = 0
shift = 0
while True:
x = trans.readAll(1) // 读取下一个字符
byte = ord(x) // 转成整数表示
result |= (byte & 0x7f) << shift // 将该字节去掉最高位放在已有结果的左侧
if byte >> 7 == 0: // 若是该字节最高位是0,结束
return result
shift += 7
复制代码