ビット演算に関する問題です.ビット演算子を使います.以下のサイトでPythonのビット演算子について詳しく説明されています.
【外部サイト】Pythonのビット演算子
# ITP2_10_A
x = int(input())
print(format(x & 0xffffffff, '032b')) # ビット列
print(format(~x & 0xffffffff, '032b')) # 反転
print(format((x<<1) & 0xffffffff, '032b')) # 左シフト
print(format((x>>1) & 0xffffffff, '032b')) # 右シフト
# ITP2_10_B
a,b = list(map(int,input().split(" ")))
print(format(a & b & 0xffffffff, '032b')) # AND
print(format(a | b & 0xffffffff, '032b')) # OR
print(format(a ^ b & 0xffffffff, '032b')) # XOR
# ITP2_10_C
# n桁目のみフラグが立っているものとの AND を考える
def bit_test(bit_flag,n):
if bit_flag & 1<<n:
return 1
else:
return 0
# n桁目のみフラグが立っているものとの OR を考える
def bit_set(bit_flag,n):
return bit_flag | 1<<n
# n桁目のみフラグが立っていないものとの AND を考える
def bit_clear(bit_flag,n):
return bit_flag & ((1<<n) ^ MAX)
# n桁目のみフラグが立っているものとの XOR を考える
def bit_flip(bit_flag,n):
return bit_flag ^ (1<<n)
# MAXと一致するかを調べる
def bit_all(bit_flag):
return int(bit_flag == MAX)
# 0でないかを調べる
def bit_any(bit_flag):
return int(bit_flag != 0)
# 0でないかを調べる
def bit_none(bit_flag):
return int(bit_flag == 0)
def bit_count(bit_flag):
return bin(bit_flag).count("1")
MAX = 0xffffffffffffffff
bit_flag = 0
n = int(input())
for _ in range(n):
query = list(map(int,input().split(" ")))
if query[0] == 0:
print(bit_test(bit_flag,query[1]))
elif query[0] == 1:
bit_flag = bit_set(bit_flag,query[1])
elif query[0] == 2:
bit_flag = bit_clear(bit_flag,query[1])
elif query[0] == 3:
bit_flag = bit_flip(bit_flag,query[1])
elif query[0] == 4:
print(bit_all(bit_flag))
elif query[0] == 5:
print(bit_any(bit_flag))
elif query[0] == 6:
print(bit_none(bit_flag))
elif query[0] == 7:
print(bit_count(bit_flag))
else:
print(bit_flag)
# ITP2_10_D
# n桁目のみフラグが立っているものとの AND を考える
def bit_test(bit_flag,n):
if bit_flag & 1<<n:
return 1
else:
return 0
# マスクとの OR を考える
def bit_set(bit_flag,mask):
return bit_flag | mask
# マスクを反転させたものとの AND を考える
def bit_clear(bit_flag,mask):
return bit_flag & (mask ^ MAX)
# n桁目のみフラグが立っているものとの XOR を考える
def bit_flip(bit_flag,mask):
return bit_flag ^ mask
# bit_flag と mask のAND が mask と一致すればよい
def bit_all(bit_flag,mask):
return int((bit_flag & mask) == mask)
# bit_flag と mask の AND が0でないかを調べる
def bit_any(bit_flag,mask):
return int((bit_flag & mask) != 0)
# bit_flag と mask の AND が0でないかを調べる
def bit_none(bit_flag,mask):
return int((bit_flag & mask) == 0)
# bit_flag と mask の AND に対してカウントする
def bit_count(bit_flag,mask):
return bin(bit_flag & mask).count("1")
# bit_flag と mask の AND を返す
def bit_val(bit_flag,mask):
return bit_flag & mask
MAX = 0xffffffffffffffff
bit_flag = 0
# mask を作ってリストで管理する
mask_list = []
n = int(input())
for _ in range(n):
bit_string = list(map(int,input().split(" ")))[1:]
mask = 0
for b in bit_string:
mask += 2**b
mask_list.append(mask)
n = int(input())
for _ in range(n):
query = list(map(int,input().split(" ")))
if query[0] == 0:
print(bit_test(bit_flag,query[1]))
else:
mask = mask_list[query[1]]
if query[0] == 1:
bit_flag = bit_set(bit_flag,mask)
elif query[0] == 2:
bit_flag = bit_clear(bit_flag,mask)
elif query[0] == 3:
bit_flag = bit_flip(bit_flag,mask)
elif query[0] == 4:
print(bit_all(bit_flag,mask))
elif query[0] == 5:
print(bit_any(bit_flag,mask))
elif query[0] == 6:
print(bit_none(bit_flag,mask))
elif query[0] == 7:
print(bit_count(bit_flag,mask))
else:
print(bit_val(bit_flag,mask))