상위 목록: 하위 목록: 작성 날짜: 읽는 데 11 분 소요

비트 연산(Bitwise)

연산 의미
x | y or
x & y and
x ^ y xor
x « y left shift
x » y right shift
~x not

비트 연산을 통하여 2진법으로 구성된 값을 계산할 수 있습니다.

각 자릿수를 서로 비교하여 결과를 반환합니다.

  • or : 둘 중 하나의 값이 1일 경우 1을 반환
  • and : 둘 다 값이 1일 경우 1을 반환
  • xor : 둘 다 값이 다를 경우 1을 반환
  • left shift : 좌측으로 y회 비트 밀기
  • right shift : 우측으로 y회 비트 밀기
  • not : 반전


x = 0b0110
y = 0b1010

print(bin(x | y), x | y)
print(bin(x & y), x & y)
print(bin(x ^ y), x ^ y)
print(bin(x << 1), x << 1)
print(bin(y >> 1), y >> 1)
print(bin(~x), ~x)
결과
0b1110 14
0b10 2
0b1100 12
0b1100 12
0b101 5
-0b111 -7


2진법0b를 포함하여 01로 구성된 진법입니다. 맨 우측 첫 자릿수부터 2^n-1을 의미합니다. (n=1)

0b0110의 경우 0 / 1 / 1 / 0 이므로 2^2 + 2^1입니다. 즉, 0b0110=6을 의미합니다.

0b1010의 경우 1 / 0 / 1 / 0 이므로 2^3 + 2^1입니다. 즉, 0b1010=10을 의미합니다.

or, and, xor은 각 자릿수들을 비교하여 반환하며 결과에서 확인 가능합니다.

shifty회 만큼 방향으로 이동하며 결과에서 확인 가능합니다.

not의 경우 0 → 11 → 0으로 반전시킵니다. 하지만 여기서 -6이 아닌 -7이 나오는데, 2의 보수 표현법을 사용하기 때문입니다.

  • Tip : 2의 보수란 반전 시킨 값에 +1을 더해주어 음수를 표현하기 위해 사용합니다. 맨 앞에 -을 표현하여 반전을 대체합니다.



함수 사용

L1 = [True, True, False]

print(L1)
print(all(L1))
print(any(L1))

L2 = [1, 1, 0]

print(L2)
print(all(L2))
print(any(L2))

L3 = [3 > 0, 3 > 2, 2 == 2]

print(L3)
print(all(L3))
print(any(L3))
결과
[True, True, False]
False
True
[1, 1, 0]
False
True
[True, True, True]
True
True

all(목록)을 사용하여 목록 내의 모든 원소일 경우 True를 반환합니다.

any(목록)을 사용하여 목록 내의 원소 중 하나라도 일 경우 True를 반환합니다.

  • Tip : 논리 형식이나 상수형, 조건식TrueFalse로 반환되는 값은 사용이 가능합니다.


numb = 33.2
L = [1, 2, 3, 4]

print(isinstance(numb, int))
print(isinstance(numb, float))
print(isinstance(L, list))
print(isinstance(L[0], list))
결과
False
True
True
False

isinstance(객체, 클래스)를 사용하여 객체클래스의 객체인지를 확인합니다.

댓글 남기기