
파이썬 자료구조 Chapter 02 바이트와 바이트 배열
2021, May 23
PART 자료구조 Contents
2.5 바이트와 바이트 배열
파이썬은 원시 바이트raw byte를 처리하는 데 사용할 수 있는 데이터 타입으로 불변 타입의 바이트(byte)와 가변 타입의 바이트 배열(bytearray)을 제공
두 타입 모두 0~255 범위의 부호 없는 8 비트 정수 시퀀스
바이트 타입 : 문자열 타입과 유사
바이브 배열 타입 : 리스트 타입과 유사
>>> blist = [1, 2, 3, 255]
>>> the_bytes = bytes(blist)
>>> the_bytes
b'\x01\x02\x03\xff'
>>> the_byte_array = bytearray(blist)
>>> the_byte_array
bytearray(b'\x01\x02\x03\xff')
>>>
>>> the_bytes[1] = 127 # 불변(immutable)
TypeError Traceback (most recent call last)
<ipython-input-70-d52bfbb74c55> in <module>
6 the_byte_array
7
----> 8 the_bytes[1] = 127 # 불변(immutable)
TypeError: 'bytes' object does not support item assignment
>>>
>>> the_byte_array[1] = 127 # 가변(mutable)
>>> the_byte_array
bytearray(b'\x01\x7f\x03\xff')
2.5.1 비트와 비트 연산자
비트 연산자는 비트로 표현된 숫자 조작에 유용
예: 곱셈 연산자 대신 비트 연산자로 곱셈 가능
1 « x는 숫자 1을 x번만큼 왼쪽으로 이동left shift한다는 의미로 $2$$x$를 신속하게 계산 가능
또한 $x$ & $(x -1)$이 0 인지 확인하면, x가 2의 제곱인지 아닌지 신속하게 확인 가능
예: x가 4(=22)인 경우, 4는 100(2)이고 x-1인 3은 011(2)
두 값에 비트 AND(&)을 적용하면 0이 된다. 즉 2x를 비트로 표현하면 100…0이 되고 2x을 비트로 표현하면 011…1이 되므로,
이 두 값에 비트 AND 연산을 적용하면 0이 된다(x 는 0보다 큰 정수여야 함)
>>> x = 4
>>> 1<< x
16
>>>
>>> x = 8
>>> x & (x-1)
0
>>>
>>> x = 6
>>> x & (x-1)
4