位运算、左移、右移

(1)按位与 &

  • 相同位的数字只要有0则位0

(2)按位或 |

  • 相同位的数字只要有1就为1

位运算、左移、右移

(3)按位异或

  • 相同位的数字数值不同则为1相同则为0
    位运算、左移、右移

(4)按位异或应用场景

(1)判断两个字符串是否相同

  • 第一步:循环两组字符串,利用ord()函数获取其每个字符对应编码值
  • 第二步:利用按位异或相同位数的数字一样则为0的属性来进行对比
  • 将比较的值交给一个变量result来保存,然后与0进行对比,如果等于0,继续比较下一位上的值,直到最后一位,如果所有比较结果都为0,则两组字符串相等,否则两组字符串不相等。

(2)示例演示

s1 = 'abcdsgrgtleth800992edf'                                               
s2 = 'abcdsgrgtleth800992edf'

def compare(s1, s2):
   result = 0
   for x, y in zip(s1, s2):
       result = ord(x) ^ ord(y)
       if result != 0:
           return result == 0
   return result == 0

print(compare(s1, s2))
[email protected]-virtual-machine:~$ python3 test.py 
True
s1 = 'abcdsgrgtleth800992edf'                                               
s2 = 'abcdsgggtleth800992edf'

def compare(s1, s2):
   result = 0
   for x, y in zip(s1, s2):
       result = ord(x) ^ ord(y)
       if result != 0:
           return result == 0
   return result == 0

print(compare(s1, s2))
[email protected]-virtual-machine:~$ python3 test.py 
False

(5)左移 <<

  • 将运算数的二进制整体左移指定位数,低位用0补齐,将一个数左移一位扩大2倍,以此类推。
0 0 0 0 0 0 0 1            1

整体左移一位,低位补0

0 0 0 0 0 0 1 0            2

再次左移一位

0 0 0 0 0 1 0 0            4


验证:

>>> 1 << 1
2
>>> 2 << 1
4

(6)右移 >>

  • 将运算数的二进制整体右移指定位数,高位用0补齐,将一个数右移一位缩小2倍,以此类推。
0 0 0 0 0 1 0 0            4

整体右移一位,高位补0

0 0 0 0 0 0 1 0            2

再次右移一位

0 0 0 0 0 0 0 1            1


验证:

>>> 4 >> 1
2
>>> 2 >> 1
1