본문 바로가기
homework-jueon/0x01-200제

25. 비트 연산자

by SpeeDr00t 2020. 1. 4.
반응형
#-*- coding:utf-8 -*-
#test by Xd
bitx = 0x53 # 0000 0101 0011
bity = 0x42 # 0100 0010
print(hex(bitx & bity)) #and 0100 0010 (0x42) 비트의 and는 두 개의 바이트를 비교하여 동일한 자리의 비트가 참이면 그대로 참, 하나라도 거짓이면 거짓으로 한다.
print(hex(bitx | bity)) #or 0101 0011 (0x53) 비트의 or은 두 개의 바이트를 비교하여 동일한 자리의 비트 중 하나라도 참이면 참, 둘 다 거짓이면 거짓으로 한다.
print(hex(bitx ^ bity)) #xor 0001 0001 비트의 xor은 or과 비슷하게 두 개의 바이트를 비교하여 동일한 자리의 비트 중 하나가 참이면 참, 둘 다 거짓이면 거짓이지만 둘 다 참이어도 거짓으로 한다.
print(hex(bitx >> 1)) #shift 0101 0011 -> 0010 1001
print(hex(bitx << 3)) #shift 0101 0011 -> 0010 1001 1000
"""
시프트가 왼쪽으로 갈 때 이동하는
왼쪽 비트가 1이면 그 값을 보존시킨다.
0000 0000 0000처럼 앞에 4비트를 추가한다.
오른쪽으로 갈 때는 오른쪽 비트가 1이라도 없애고 맨 앞에 0을 추가한다.
왼쪽으로 갈 때 왼쪽 비트가 1이 아닌 0이면 마찬가지로 뒤에 0을 추가한다.
"""
view raw 2001040101.py hosted with ❤ by GitHub

1비트는 1 또는 0으로만 표현될 수 있는 데이터 단위이다.

비트 연산자의 종류에는 &, |, ^, ~, >>, <<가 있는데 이 중 ~는 1의 보수로 비트를 반전시키는데 그걸 이해하려면 2의 보수개념을 알아야 한다. 여기서는 다루지 않음

 

& 비트의 and 연산을 한다. 비트 값을 서로 비교했을 때 동일한 자리의 비트가 참이면 참, 하나 이상이 거짓이면 거짓이다.

| 비트의 or 연산을 한다. 비트 값을 서로 비교했을 때 동일한 자리의 비트가 하나 이상이 참이면 참, 둘 다 거짓이면 거짓이다.

^ 비트의 xor 연산을 한다. 비트 값을 서로 비교했을 때 동일한 자리의 비트의 값이 다른 경우 거짓, 같으면 참이다.

>> n 비트를 n만큼 오른쪽으로 이동(시프트)시킨다. 비트 값이 오른쪽으로 밀려나면 해당 비트를 없애고 맨 앞(왼쪽)을 0으로 채운다. 

<< n 비트를 n만큼 왼쪽으로 이동(시프트)시킨다. 비트 값이 왼쪽으로 밀려날 때 해당 비트가 0이면 없애고 맨 끝(오른쪽)을 0으로 채우고 해당 비트가 1이면 비트를 보존시키면서 맨 앞에 새로 4비트를 추가한다.

예)

0x58을 << 3 했을 때

0x58 = 0101 1000

 

0010 1100 0000으로 시프트한다.

반응형

'homework-jueon > 0x01-200제' 카테고리의 다른 글

27. 시퀀스 자료 인덱싱  (0) 2020.01.05
26. 시퀀스 자료형  (0) 2020.01.04
24. 논리 연산자  (0) 2020.01.02
23. 관계 연산자  (0) 2020.01.02
21. 연산자 축약  (0) 2020.01.02