Python按位或(|)运算符的内部逻辑是什么?

What is the internal logic of the Python bitwise OR (|) operator?

我刚刚开始了 Codeacademy 上 Python 2.7 课程的 "advanced" 阶段,并付出了额外的努力尝试编写一个函数来执行手动按位或(|) 操作。

我想出的不是最易读的解决方案(所以不是 Pythonic)...

def bitwiseOr(bin1, bin2):
    """Perform a bitwise OR swap of two string representations of a binary number"""

    # if the second bit is larger (in length), swap them
    if len(bin1) < len(bin2):
        bin1, bin2 = bin2, bin1

    # cast string into list using list comprehension
    result = [x for x in bin1]
    resultString = ""

    # start at the end of the smallest length bit string, 
    # moving backwards by 1 char, and stop at the 2nd char
    for i in range(len(bin2), 2, -1):        
        if bin2[i-1] == "1":
            result[i] = bin2[i-1]

    # convert the list back into a string
    for item in result:
        resultString += item        

    return resultString


print bin(0b1110 | 0b101)
print bitwiseOr("0b101", "0b1110")

上面的两个 print 都调用了 return 相同的结果(尽管第一次调用 returning 二进制数和第二个 returning 字符串表示二进制数)。

撇开可读性不谈——我很想知道它是如何逻辑上在内部由Python完成的。尽管我认为我找到了正确的文件(C 对我来说很陌生),但在 CPython 存储库中四处寻找并没有产生太多成果。

我的逻辑意思是,通常有几种方法可以解决任何给定的问题,我通过将每个数字的基数 2 表示形式作为字符串传递来解决这个问题,并根据更大长度的二进制创建列表,并比较每个字符,优先选择 1.

Python内部是如何做到的?

OR运算符就像一个并联电路,有两条线路,即使其中一条线路断了,电流也会流过。只有当两条路线都被打破时,它才会停止。但是你必须小心 python 中的 OR 运算符,虽然它看起来很简单,但逻辑必须非常仔细地决定,否则你可能很难调试你的代码。

对于未经训练的人(没有计算机科学背景的人)来说,这个问题是关于试图理解 Python 的按位或运算的 C 实现。

然而,经过更多的研究后,我意识到这个问题,对于受过训练的人来说,可能看起来很荒谬,因为它实际上是 the processor itself 理解这种类型的操作。

这意味着Python按位或运算的内部逻辑实际上完全是dependent on the instructions available to the CPU,即不依赖于更高级的语言。

所以综上所述,Python按位或运算符的内部逻辑是对所讨论机器的位(1和0)进行比较,它如何执行这个操作是直接比较令人兴奋的是,这些位是 not dissimilar to how Ancient Egyptians performed multiplication。哇哦