python小记-异或操作、或操作、与操作

操作 特点 应用场景
异或 两个操作数不同则结果为1,相同则结果为0 加密算法、校验和计算、找出数组中出现奇数次的元素等
两个操作数中有一个为1则结果为1 逻辑判断、权限控制、开关状态判断等
两个操作数都为1则结果为1 掩码操作、位运算、逻辑判断等

说明:

  1. 异或操作(XOR):当两个操作数不同的时候,结果为1;当两个操作数相同的时候,结果为0。异或操作具有自反性(A XOR A = 0)和交换律(A XOR B = B XOR A)特点。在加密算法、校验和计算、找出数组中出现奇数次的元素等场景中,异或操作被广泛使用。

  2. 或操作(OR):当两个操作数中有一个为1的时候,结果为1;当两个操作数都为0的时候,结果为0。或操作常用于逻辑判断、权限控制、开关状态判断等场景。

  3. 与操作(AND):当两个操作数都为1的时候,结果为1;当两个操作数有一个为0的时候,结果为0。与操作常用于掩码操作、位运算、逻辑判断等场景。

这些逻辑操作在计算机科学和电子工程领域中有广泛的应用,可以用来处理逻辑判断、数据加密、数据传输校验、位运算等任务。在编程和电路设计中,这些逻辑操作为构建复杂的逻辑和功能提供了基础。

异或运算

异或运算(XOR,Exclusive OR)是一种二进制运算,它适用于两个二进制数的每一位,其运算规则如下:

  1. 如果两个二进制位相同(都是0或都是1),则结果为0。
  2. 如果两个二进制位不同(一个是0一个是1),则结果为1。

异或运算常用符号为,在编程语言中通常表示为""。

异或运算有一些重要的性质:

  1. 任何数与0进行异或运算的结果仍然是该数本身,即a ^ 0 = a。
  2. 任何数与自身进行异或运算的结果为0,即a ^ a = 0。
  3. 异或运算满足交换律,即a ^ b = b ^ a。
  4. 异或运算满足结合律,即(a ^ b) ^ c = a ^ (b ^ c)。

由于这些性质,异或运算在计算机中有广泛的应用,常用于以下场景:

  1. 交换两个变量的值,而不需要额外的临时变量。
  2. 在不使用额外空间的情况下,对数组中的元素进行排序。
  3. 快速判断两个数是否相等,由于a ^ b = 0的性质,可以用于判断两个数是否相等。

在编程中,异或运算通常用于解决一些位运算和计算机底层操作的问题,也是解决一些算法题目的常用技巧之一。

或运算、与运算

或运算(OR,Bitwise OR)和与运算(AND,Bitwise AND)是两种二进制运算,它们适用于两个二进制数的每一位,其运算规则如下:

  1. 或运算(|):两个二进制位只要有一个是1,结果就为1,否则结果为0。

    • 例如:0b1101 | 0b1010 = 0b1111
  2. 与运算(&):两个二进制位必须都是1,结果才为1,否则结果为0。

    • 例如:0b1101 & 0b1010 = 0b1000

或运算和与运算在计算机中有广泛的应用,常用于以下场景:

  1. 位掩码:通过与运算和或运算,可以对一个数的特定位进行掩码操作,从而提取或设置特定的位信息。
  2. 条件判断:可以利用与运算和或运算来实现条件判断的效果,如根据某个条件来判断是否执行某些操作或设置某些标志位。
  3. 位运算:与运算和或运算是位运算的基本操作,可以用于在二进制数中进行各种位级别的操作,如移位、取反等。

在编程中,或运算和与运算常常用于解决一些位运算问题,或者对二进制数的位进行控制和操作。它们是计算机底层操作的基础,也是一些算法和数据处理中常用的工具。

异或的应用

例如,对于数组[2, 3, 4, 2, 4, 5, 3],我们可以进行如下操作:

  1. 初始化一个变量result为0。
  2. 对数组中的每个数num执行result ^= num操作,即将result与num进行异或运算,并将结果赋值给result。
  3. 最终result的值就是只出现一次的数。

Python代码示例:

def find_single_number(nums):
    result = 0
    for num in nums:
        result ^= num
    return result

# 示例
nums = [2, 3, 4, 2, 4, 5, 3]
print(find_single_number(nums))  # 输出:5

通过异或运算,我们可以高效地找出数组中只出现一次的数,而不用额外的数据结构或复杂的遍历方法。

与操作、或操作的应用

以下是两个使用或运算和与运算的算法示例:

  1. 位掩码:
    位掩码是使用与运算和或运算对一个数的特定位进行掩码操作的技巧。通过将某些位设置为1或0,我们可以屏蔽或提取出需要的信息。

示例:使用位掩码提取一个32位整数的低16位和高16位。

def extract_low_and_high_bits(num):
    low_bits = num & 0xFFFF  # 0xFFFF表示16个二进制位全为1,其余位全为0
    high_bits = (num >> 16) & 0xFFFF
    return low_bits, high_bits

# 示例
number = 0b11001100110011001100110011001100  # 一个32位整数
low, high = extract_low_and_high_bits(number)
print("低16位:", bin(low))
print("高16位:", bin(high))
  1. 判断奇偶数:
    对于一个二进制数,它的最后一位为1表示奇数,为0表示偶数。因此,我们可以使用与运算来判断一个整数是奇数还是偶数。

示例:使用与运算判断一个整数是奇数还是偶数。

def is_even_or_odd(num):
    if num & 1 == 0:
        return "偶数"
    else:
        return "奇数"

# 示例
number = 10
print(number, "是", is_even_or_odd(number))

这些示例展示了或运算和与运算在算法中的应用,它们可以帮助我们进行位级别的操作和判断,是解决一些二进制数问题的常用技巧。

猜你喜欢

转载自blog.csdn.net/qq_40140808/article/details/131884214