배경 설명
2진수 변환 방법은 앞에 설명했으므로 생략.
1의 보수: 이진수로 변환한 수에서 1과 0을 바꾼다. (1이면 0으로, 0이면 1로)
2의 보수: 1의 보수+1
이진수 수동변환
a = int(input())
bin_list = []
while a >= 1:
bin_list.append(a%2)
a = int(a/2)
bin = bin_list[::-1]
bin = ''.join(map(str,bin))
print(bin)
# 입력한 숫자를 이진수로 바꿔준다. (물론 수동 방식이다)
10진법으로 입력한 숫자를 2진수로 바꿔주는 방식. 응용하면 8진수나 16진수도 된다.
1의 보수
for i in range(len(bin_list)):
if bin_list[i] == 1:
bin_list[i] = 0
else:
bin_list[i] = 1
bin = bin_list[::-1]
bin = ''.join(map(str,bin))
print(bin)
# 1의 보수(2의 보수는 이 방식으로 할 경우 처리가 되게 애매해지는 문제가 있다)
2의 보수
b=int(comp_1,2)
b=b+1
print(b)
# 그래서 2의 보수는 일단 10진수로 바꾼 다음, 1을 더하고 다시 바꿀 예정.
comp2_list=[]
while b >= 1:
comp2_list.append(b%2)
b = int(b/2)
comp_2 = comp2_list[::-1]
comp_2 = ''.join(map(str,comp_2))
print(comp_2)
# 아, 0 빠진건 알아서 붙이세요.
자매품-16진수
a = int(input())
hex_list = []
while a >= 1:
if a % 16 == 10: # 16진수에서 10~15까지는 각각 A~F로 표기한다. 즉, 여기에 대한 처리를 따로 진행해야 한다.
hex_list.append("A")
elif a % 16 == 11:
hex_list.append("B")
elif a % 16 == 12:
hex_list.append("C")
elif a % 16 == 13:
hex_list.append("D")
elif a % 16 == 14:
hex_list.append("E")
elif a % 16 == 15:
hex_list.append("F")
else:
hex_list.append(a % 16)
a = int(a / 16)
hex = hex_list[::-1]
hex=''.join(map(str,hex))
print(hex)
이쪽은 10~15를 A~F로 표기하기때문에 거기에 대한 처리도 따로 해 줘야 한다.
Reply