코드
def bindigits(n, bits):
s = bin(n & int("1"*bits, 2))[2:] # int("1111111111111111", 2)""안의 숫자를 int단위로 2진수 표시, [2:]는 앞의 0b제거
# int("111",2) 결과 값은 7, bin(int"111",2) 결과 값은 0b111.
# n에다가 2진수 16bit의 최대값을 연산곱하라(Two's complement니까)
print("s : ", s) # 0을 채우지 않은 변환 값
return ("{0:0>%s}" % (bits)).format(s) #s의 결과 값의 앞에 bit 수만큼 0을 채워라.
bindigits(-12288,16)
설명
16대의 설비나 장비의 on/off (1 또는 0) 정보들을 처리하기 위해서
장비 정보들의 작동여부만 따서 16자리의 binary로 저장하기도한다.
보통 그 이유는 HW의 저장 용량을 아낄 수 있고 빠르게 불러올 수 있기 때문이다.
단점이라면 변환이 헷갈리고 의미를 모르면 활용을 못한다는 것이다.
저장의 예를 들자면 1111111011000011 이런 식인데 이게 컴퓨터에서 다시 읽으면 Decimal형태로 바뀌어져 들어온다.
거기에 -값을 사용하는 Two's compliment(2의 보수)로 읽어들여지는데
이것을 변환하는 방법이 Python에서는 위와 같다. 자세한 설명은 아래의 출처에 상세하게 나왔다.
출처
https://stackoverflow.com/questions/12946116/twos-complement-binary-in-python
Two's Complement Binary in Python?
Integers in Python are stored in two's complement, correct? Although: >>> x = 5 >>> bin(x) 0b101 And: >>> x = -5 >>> bin(x) -0b101 That's pretty lame. How d...
stackoverflow.com
https://ko.wikipedia.org/wiki/2%EC%9D%98_%EB%B3%B4%EC%88%98
2의 보수 - 위키백과, 우리 모두의 백과사전
2의 보수(--補數, 영어: two's complement)란 어떤 수를 커다란 2의 제곱수에서 빼서 얻은 이진수이다. 2의 보수는 대부분의 산술연산에서 원래 숫자의 음수처럼 취급된다. 주어진 이진수보다 한 자리
ko.wikipedia.org
굳이 프로그램까지 만들 필요가 없거나 간단하게 확인하고 싶다면
https://www.rapidtables.com/convert/number/decimal-to-binary.html?x=-7
Decimal to Binary Converter
Divide by the base 2 to get the digits from the remainders: Divisionby 2 Quotient Remainder(Digit) Bit #
www.rapidtables.com
'Python3' 카테고리의 다른 글
[python3] 데이터프레임에 있는 초단위 삭제하기 (0) | 2021.05.28 |
---|---|
[python3] 변수 이름을 print()로 화면에 출력하기 (0) | 2021.05.27 |
KeyError: 'val_mean_absolute_error' 해결법 (0) | 2021.05.15 |
나 자신에게 남기는 Python 짧은 팁들 (0) | 2021.04.28 |
jupyterlab 3.0에서 git 설치하기 (0) | 2021.04.06 |