https://www.acmicpc.net/problem/11723
문제

코드
n = int(input())
r = 0
bitset = (1 << 21) - 1
for _ in range(n):
c = input().strip().split()
if c[0] == 'add':
x = int(c[1])
r |= (1 << x)
elif c[0] == 'remove':
x = int(c[1])
r &= ~(1 << x)
elif c[0] == 'check':
x = int(c[1])
print(1 if r & (1 << x) else 0)
elif c[0] == 'toggle':
x = int(c[1])
r ^= (1 << x)
elif c[0] == 'all':
r = bitset
else:
r = 0
Idea 1
or and xor
x y
1 1 1 1 0
1 0 1 0 1
0 1 1 0 1
0 0 0 0 0
#0 base
bitset = (1 << 21) - 1 : 011111111111111111111
r = 0 : 000000000000000000000
#1 or연산 - 추가
r |= (1 << 2) : 000000000000000000100 -> 2
r |= (1 << 3) : 000000000000000001100 -> 6
#2 and연산 - 삭제
r : 000000000000000001100 -> 6
~(1 << 3) : 111111111111111110111
& ---------------------
r &= ~(1 << 3) : 000000000000000000100 -> 2
#3 xor연산 - toggle
r : 000000000000000001100 -> 6
(1 << 3) : 000000000000000001000 -> 4
^ ---------------------
r ^= (1 << 3) : 000000000000000000100 -> 2