Shaw0xyz 发表于 2024-7-8 11:41:10

深入理解Python中的位运算与常用内置函数与模块

本帖最后由 Shaw0xyz 于 2024-7-8 12:15 编辑

1. 引言

Python 是一门功能强大且灵活的编程语言,除了其广泛使用的高级功能外,位运算在某些情况下也非常有用。位运算能高效地处理二进制数据,尤其适用于底层编程和性能优化。本文将详细介绍 Python 中的位运算以及一些常用的内置函数与模块,帮助读者更好地理解和应用这些工具。

2. 位运算概述

位运算是一种直接对二进制位进行操作的运算。Python 中支持以下几种常见的位运算:
(1) 按位与(&)
(2) 按位或(|)
(3) 按位异或(^)
(4) 按位取反(~)
(5) 左移(<<)
(6) 右移(>>)

3. 常用位运算示例

3.1 按位与(&)

按位与运算符对两个整数的每一位执行逻辑与操作。只有两个对应的二进制位都为 1 时,结果位才为 1。

a = 60# 60 = 0011 1100
b = 13# 13 = 0000 1101
c = a & b# 12 = 0000 1100

3.2 按位或(|)

按位或运算符对两个整数的每一位执行逻辑或操作。只要两个对应的二进制位中有一个为 1,结果位就为 1。

a = 60# 60 = 0011 1100
b = 13# 13 = 0000 1101
c = a | b# 61 = 0011 1101

3.3 按位异或(^)

按位异或运算符对两个整数的每一位执行逻辑异或操作。只有两个对应的二进制位不相同时,结果位才为 1。

a = 60# 60 = 0011 1100
b = 13# 13 = 0000 1101
c = a ^ b# 49 = 0011 0001

3.4 按位取反(~)

按位取反运算符对整数的每一位执行逻辑非操作。它将 0 变为 1,1 变为 0。

a = 60# 60 = 0011 1100
c = ~a# -61 = 1100 0011

3.5 左移(<<)

左移运算符将一个整数的所有位左移指定的位数,右侧用 0 填充。

a = 60# 60 = 0011 1100
c = a << 2# 240 = 1111 0000

3.6 右移(>>)

右移运算符将一个整数的所有位右移指定的位数,左侧用符号位填充。

a = 60# 60 = 0011 1100
c = a >> 2# 15 = 0000 1111

4. 常用内置函数与模块

4.1 bin()

bin() 函数用于将整数转换为二进制字符串。

bin(60)# '0b111100'

4.2 int()

int() 函数可以将二进制字符串转换为整数。

int('0b111100', 2)# 60

4.3 struct 模块

struct 模块用于在 Python 中处理 C 语言结构体中的数据。

import struct

# 将整数转换为字节
packed_data = struct.pack('i', 60)
print(packed_data)# b'<\x00\x00\x00'

# 将字节转换为整数
unpacked_data = struct.unpack('i', packed_data)
print(unpacked_data)# (60,)

4.4 bitarray 模块

bitarray 模块用于创建和操作位数组。它不是 Python 内置模块,需要使用 pip 安装。

from bitarray import bitarray

# 创建位数组
a = bitarray('1100')
b = bitarray('1010')

# 按位与
c = a & b
print(c)# bitarray('1000')

5. 应用示例

5.1 网络编程中的位运算

在网络编程中,经常使用位运算来处理 IP 地址和子网掩码。

def ip_to_int(ip):
    parts = ip.split('.')
    return (int(parts) << 24) + (int(parts) << 16) + (int(parts) << 8) + int(parts)

def int_to_ip(num):
    return f"{(num >> 24) & 0xFF}.{(num >> 16) & 0xFF}.{(num >> 8) & 0xFF}.{num & 0xFF}"

ip = "192.168.1.1"
ip_int = ip_to_int(ip)
print(ip_int)# 3232235777

ip_str = int_to_ip(ip_int)
print(ip_str)# 192.168.1.1

5.2 数据压缩中的位运算

位运算在数据压缩和加密中也非常常用。例如,可以使用位运算实现简单的位级别的加密解密操作。

def encrypt_decrypt(data, key):
    return bytes()

data = b"Hello, World!"
key = 0x55
encrypted = encrypt_decrypt(data, key)
print(encrypted)

decrypted = encrypt_decrypt(encrypted, key)
print(decrypted)# b'Hello, World!'

6. 结论

本文介绍了 Python 中的位运算及其常用的内置函数与模块,通过详细的示例帮助读者理解这些操作的应用场景和方法。希望本文能帮助你更好地掌握 Python 中的位运算,并在实际开发中应用这些技巧。








/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & Linux ...

~互撩~ TG: @Shaw_0xyz
页: [1]
查看完整版本: 深入理解Python中的位运算与常用内置函数与模块