재미있다(부식 63;)비트 연산의 세계

개시하다


며칠 전에 내가 다녔던 대학 문화제가 있었다.저는 정보학과 학생입니다. 제가 속한 전자계산기 연구회라는 동아리에서 LT를 동아리 문화제 행사로 사용할 수 있는 기회를 얻었습니다. 그곳에서 "재미있습니다."라고 말했습니다.비트컴퓨팅의 세계'라는 쓰레기 제목에 LT를 적용해 가까스로 기사를 썼다.일부 슬라이드는 생략(내 개인 정보 관련 부분 등), 일부 내용은 더욱 상세하다.pytohon 프로그래밍을 통한 실행도 있습니다.(python2.7)

비트



십진수에서 이진수로 전환하는 방법을 조사해 보세요.(필산제법이 가장 유명하다?)
● 발표 당일은 11/4에 불과하다.나는 그런 사람이 아니다.

비트 연산



비트 조작에 관해서 나는 위의 두 가지 방법으로 대체적으로 안정될 수 있을 것이라고 생각한다.

비트 연산자



나는 위의 네 개가 자주 사용하는 물건이라고 생각한다.AND와 OR에 NOT를 거는 낸드와 NOR도 있다.하드웨어에서 자주 사용됩니다.python의 실행 예도 기록되어 있습니다.format는 디스플레이 형식(0 충전 등)을 쉽게 이해하기 위해 바뀌었기 때문에 비트 연산 자체와 관련이 없습니다.
bit.py
a = 0b0111                      # 01 11
b = 0b0010                      # 00 10

print('{:#006b}'.format(-~a))   # 10 00 
print('{:#006b}'.format(a & b)) # 00 10
print('{:#006b}'.format(a | b)) # 01 11
print('{:#006b}'.format(a ^ b)) # 01 01

자리를 옮기다



·'논술 이동'이 아니라'논리적 이동'이다.떳떳하지 못하다
이번 내용에서 논리적 편향이 매우 중요하다.산술 배정은 머리에 있는 1위로 플러스 마이너스 여부를 판단해 마이너스를 표시하는 사람을 대상으로 한다.왼쪽은 <<, 오른쪽은 >로 이동합니다.
bit.py
ab = 0b01110010                   # 01 11 00 10

print('{:#010b}'.format(ab << 1)) # 11 10 01 00
print('{:#010b}'.format(ab >> 1)) # 00 11 10 01

팝업 개수



여기서는 2위에서 8위 순서로 병합된다.연산자와 위치 이동의 우선순위가 비교적 높음을 주의하십시오.
bit.py
ab = 0b01110010                          # 01 11 00 10

# 2ビットずつ
ab_1 = (ab & 0b01010101)                 # 01 01 00 00
ab_2 = (ab & 0b10101010) >> 1            # 00 01 00 01
print('{:#010b}'.format(ab_1 + ab_2))    # 01 10 00 01 : 2ビットずつ合算

# 4ビットずつ
ab_3 = ((ab_1 + ab_2) & 0b00110011)      # 00 10 00 01
ab_4 = ((ab_1 + ab_2) & 0b11001100) >> 2 # 00 01 00 00
print('{:#010b}'.format(ab_3 + ab_4))    # 00 11 00 01 : 4ビットずつ合算

# 8ビットずつ
ab_5 = ((ab_3 + ab_4) & 0b00001111)      # 00 00 00 01
ab_6 = ((ab_3 + ab_4) & 0b11110000) >> 4 # 00 00 00 11
print('{:#010b}'.format(ab_5 + ab_6))    # 00 00 01 00 : 8ビットずつ合算

한명 거리



두 개의 비트열의 XOR (배타적 논리와) 을 취하면 POP 계수에서 '1' 개를 셀 수 있습니다.
bit.py
ab = 0b01110010
ab_xor = (ab << 1) ^ (ab >> 1)

ab_xor_1 = (ab_xor & 0b01010101)
ab_xor_2 = (ab_xor & 0b10101010) >> 1
ab_xor_3 = ((ab_xor_1 + ab_xor_2) & 0b00110011)
ab_xor_4 = ((ab_xor_1 + ab_xor_2) & 0b11001100) >> 2
ab_xor_5 = ((ab_xor_3 + ab_xor_4) & 0b00001111)
ab_xor_6 = ((ab_xor_3 + ab_xor_4) & 0b11110000) >> 4
print('{:#010b}'.format(ab_xor_5 + ab_xor_6))        # distance

# (ab << 1) -> 11 10 01 00
# (ab >> 1) -> 00 11 10 01 
#    ab_xor -> 11 01 11 01
#  distance -> 00 00 01 10

비트 결합




사용 빈도가 높은 비트 합병.합체보다는 연결이 더 잘 맞는데 귀찮아서 개명하지 않아요.
bit.py
a = 0b0111
b = 0b0010

print('{:#010b}'.format(a << 4 | b))

총결산


어쨌든 제한된 시간 안에 발표할 수 있는 건 이 정도야.앞으로 추가될지도 모른다고??더 재밌는 게 있으면 댓글로 알려주면 좋겠네요.

좋은 웹페이지 즐겨찾기