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。哇哦
我刚刚开始了 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。哇哦