아직 numpy array 하는 법과
리스트에 입출력하는 것이 익숙지 않아서
미숙하지만
힘들게 만들어봤다.
-----------------------------------------------
파이썬은 C언어와 다르게 정수를 나누면 실수가 되어서
math.floor() : 소수점 버림 을 사용하였고
-> math를 사용안하고 num을 다 n으로 바꿔
n//=2 로 나타내어도 된다.
수학적으로 2로 나눠지면 0
나눠지지않고 나머지가 1일 때를
구분하여 2진법으로 표현하였다.
-----------------------------------------------
이부분은 0과 1로 표현했을 때 0001 0000 로 4자리씩 표현하기 위해
가변적으로 앞에 0을 추가하고자 넣었다.
(1 0000 -> 0001 0000)
-----------------------------------------------
리스트에 0을 넣어 표현하여도 괜찮지만
numpy 모듈의 np.full(length, 0) 으로 간단하게 표현하고 싶어서 넣었다.
나눠서 0과 1을 추가하는 과정이 표현과 반대로 되어서
list(reversed(a))
를 사용하였고
0으로만 있는 배열(b)과 계산된 배열(a)의 간격을 조정하기 위해
start = len(b) - len(a)
로 표현하였다.
가장 마지막 줄
reshape를 사용한건
00010000을 0001 0000로 잘라내기 위해
출력하기 좋은 형태로 만들어준 것이다.
-----------------------------------------------
위에서 reshape 한 배열을 4자리로 나눠 출력하고자 한 코드이다.
def ShowBit(n):
a = []
while n >= 1:
num = math.floor(n)
if num % 2 == 0:
a.append(0)
else:
a.append(1)
n /= 2
for i in range(1, len(a)):
if len(a) <= i * 4:
length = i * 4
break
b = np.full(length, 0)
start = len(b) - len(a)
index = int(length / 4)
b[start:] = list(reversed(a))
four2 = b.reshape(index, 4)
for i in range(index):
for j in range(4):
print(four2[i, j], end="")
if i != index - 1:
print(" ", end="")
ShowBit(256)