저는 Codeacademy에서 Python 2.7 과정의 "고급"단계를 시작했으며 수동 bitwise OR (|
) 작업을 수행하는 기능을 작성하려고했습니다. 가장 읽을 수있는 솔루션 (그렇게하지 그래서 파이썬)하지 않습니다와 내가 와서 무엇파이썬 비트 OR (|) 연산자의 내부 논리는 무엇입니까?
...
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
전화에 모두 바이너리를 반환 첫 번째 통화에 불구하고 (같은 결과를 반환 두 번째 숫자는 2 진수의 문자열 표현을 반환합니다).
가독성을 제쳐두고 - 논리적으로 이 어떻게 내부적으로 파이썬에 의해 처리되었는지 보는 것이 흥미 롭습니다. CPython 저장소를 돌아 다니는 것은 올바른 파일을 찾은 것 같지만 (C는 내게 매우 외국 임) 사실에도 불구하고 많은 것을 산출하지 못했습니다.
논리적으로 말하면, 주어진 문제를 해결하는 데는 일반적으로 몇 가지 방법이 있습니다. 각 숫자의 기본 2 표현을 문자열로 전달하고, 더 큰 길이의 이진을 기반으로 목록을 만들고, 각 문자를 비교하여 1을 우선적으로 비교합니다.
어떻게 내부적으로 파이썬을합니까?
"파이썬이 어떤 로직을 사용하여 각 비트를 교체하거나 바꿀 까?"라는 질문을 받고 있습니다. 나는 그것이 ** 무슨 일을하는지 이해하고, 이제는 ** 어떻게 ** 알고 싶다. – GrayedFox
필자는 결국이 명령을 저레벨의 CPU 명령으로 변환한다는 것을 확신합니다. –
그래서 비트가 대체되는 방법을 묻고 있습니까? '100101'을 예로 들어 보겠습니다. '100101 | 011101 '은'111101'이다. 어느 비트가 1이면 결과 비트는 1입니다. – Li357